본문 바로가기

Artificial Intelligence/Machine Learning

[Machine Learning] 영화 관객수 예측 모델 (4)

728x90

time, dir_prev_num, num_actor, dir_prev_bfnum을 feature값으로 사용하여 모델을 학습하였는데 이번에는 genre까지 feature에 추가하여 모델을 만들겠다.

 

from sklearn import preprocessing
le = preprocessing.LabelEncoder()
train['genre'] = le.fit_transform(train['genre'])

 

 

feature로 사용하기 위해서는 genre가 숫자로 표현되어야 한다. 따라서 preprocessing을 사용하여 각각의 genre들을 고유한 값으로 변환시 겨서 적용해준다. 

 

print(train.tail(3))

title distributor  genre release_time  time screening_rat director  \
597   살인의 강   (주)마운틴픽쳐스      1   2010-09-30    99      청소년 관람불가      김대현   
598  악의 연대기   CJ 엔터테인먼트      2   2015-05-14   102       15세 관람가      백운학   
599     베를린   CJ 엔터테인먼트     10   2013-01-30   120       15세 관람가      류승완   

     dir_prev_bfnum  dir_prev_num  num_staff  num_actor  box_off_num  
597             0.0             0        123          4         2475  
598             0.0             0        431          4      2192525  
599             0.0             0        363          5      7166532  

 

train 데이트프레임을 확인해보면 genre 값이 1, 1, 10 숫자로 변환된 거를 볼 수 있다.

 

features = ['time', 'dir_prev_num', 'num_actor', 'dir_prev_bfnum', 'genre']

 

이제 features에 genre를 추가해준다.

 

X_train, X_test, y_train = train[features], test[features], train[target]

 

X_train, X_test, y_train에 features값과 target값에 test와 train 데이터를 생성해준다.

 

model = lgb.LGBMRegressor(random_state=1234,n_estimators=1000)

models = []

for train_idx, val_idx in k_fold.split(X_train):
    x_t = X_train.iloc[train_idx]
    y_t = y_train.iloc[train_idx]
    x_val = X_train.iloc[val_idx]
    y_val = y_train.iloc[val_idx]
    
    models.append(model.fit(x_t, y_t, eval_set=(x_val, y_val), early_stopping_rounds=100, verbose = 100))

 

이전 설정된 k_fold값에 따라 모델을 학습시켜준다.

 

preds = []

for model in models:
    preds.append(model.predict(X_test))

 

각 모델의 예측값을 preds에 넣어준다.

 

featureLightGBM = submission.copy()

 

featureLightGBM에 submission 데이터를 복사해준다.

 

featureLightGBM['box_off_num'] = np.mean(preds, axis=0)

 

학습된 모델들의 예측값의 평균을 featureLightGBM에 저장해준다.

 

pd.options.display.float_format = '{:.1f}'.format
print(featureLightGBM.tail())

               title  box_off_num
238        해에게서 소년에게     172238.8
239           울보 권투부     209268.0
240             어떤살인    1286869.1
241        말하지 못한 비밀     359618.3
242  조선안방 스캔들-칠거지악 2     124363.3

 

판다스의 float_format을 설정하여 featureLightGBM의 값을 확인해본다.

 

pd.reset_option('display.float_format')
featureLightGBM.to_csv('featureLightGBM.csv', index=False)

 

float_format을 초기화해준 후 예측값을 저장해준다.

728x90