본문 바로가기
Programming_Collective Intelligence/8.가격모델링

예제 데이터 셋 생성

by 볼록티 2020. 1. 7.
728x90
반응형

 

 예제 데이터 만들기 

 와인 가격 데이터 세트. 가격은 rating(등급)과 age(숙성기간)를 조합하여 만들게 된다. 이 모델에서는 와인이 최적 연도를 가지고 있어, 훌륭한 와인은 최적연도가 길고, 나쁜 와인은 거의 현재가 최적 연도라고 가정한다.

 

 높은 등급의 와인은 높은 가격에서 시작해서 최적연도까지 계속 가치가 증가하지만, 낮은 등급의 와인은 싸게 시작해서 점점 더 저렴해진다.

 

아래에는 등급과 숙성기간을 넣으면 가격을 출력해주는 함수이다. 등급에서 50을 빼는 것은 최적연도가 지났는지를 판별하기 위한 것.

from random import random,randint
import math

def wineprice(rating, age):
    peak_age=rating-50  # 등급에서 50을 뺌
    
    #등급에 따라 가격을 계산한다.
    price=rating/2
    
    if age > peak_age:
        #최적 연도가 지나면 5년 단위로 가격이 저하됨
        price= price*(5-((age+1)/peak_age))
    else:
        #최적 연도에 근접하면 원래 가격의 5배까지 증가함
        price= price*(5*((age+1)/peak_age))
    if price<0:
        price=0
    return price

 

아래에는 300개의 랜덤한 와인 데이터셋을 만들고, 가격도 구한다음 세금과 지역 편차를 반영하고, 숫자 추정이 더 어렵게 만들기 위해서 가격에다가 무작위로 20%를 더하거나 뺀다(0.8을 곱하거나 1.2를 곱한다.).

def wineset1():
    rows=[]
    for i in range(300):
        #무작위로 age와 rating을 생성함 
        rating = random()*50+50 # 1~100사이의 랜덤한 소수를 가지게 된다.
        age = random()*50 # 0~50 사이의 랜덤한 소수를 가지게 된다.
        
        #가격을 얻음
        price= wineprice(rating, age)
        
        #노이즈를 부가함
        price*= (random()*0.4+0.8) # 0.8 ~ 1.2 사이의 값을 랜덤으로 추출하여 곱한다.
        
        #데이터 세트에 추가함
        rows.append({'input':(rating,age),
                    'result':price})
    return rows
x=wineset1()

생성된 와인데이터셋을 통해 가격을 살펴보자.

 

등급 88.68에 숙성기간이 17.89 정도면 result와 같은 결과를 얻게 된다.

 

첫번째 와인보다 더 높은 가격이 책정된 것을 알 수 있다.

 

위의 결과는 만기가 되어 가격이 0원으로 책정이 된것을 알 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

'Programming_Collective Intelligence > 8.가격모델링' 카테고리의 다른 글

교차검증  (0) 2020.01.08
kNN + 가중치  (0) 2020.01.07
kNN을 활용한 가격 추정  (0) 2020.01.07

댓글