관리 메뉴

솜씨좋은장씨

데이콘 X AI 프렌즈 온도추정 경진대회 도전 5, 6회차 본문

DACON/AI프렌즈 시즌1 온도 추정 경진대회

데이콘 X AI 프렌즈 온도추정 경진대회 도전 5, 6회차

솜씨좋은장씨 2020. 3. 19. 01:41
728x90
반응형

데이콘 온도추정 경진대회 도전 5, 6회차입니다.

 

[공공] AI프렌즈 시즌1 온도 추정 경진대회

출처 : DACON - Data Science Competition

dacon.io

첫번째 시도

Y18의 앞쪽 30분간의 없는 데이터를 Y06, Y09, Y12, Y16, Y17 의 평균으로 채워넣고

기상청 데이터는 X00, X07, X28, X31, X32 기온데이터, X11, X34 일일 누적 일사량 

데이터를 사용하였습니다.

data_for_graph = train.loc[:, ['Y06', 'Y09', 'Y12', 'Y16', 'Y17']].dropna()
plt.figure(figsize=(20, 10))
plt.plot(data_for_graph)

import numpy as np
new_Y_18 = []
for i in range(len(data_for_graph['Y06'])):
  new_Y_18.append(np.mean([data_for_graph['Y06'].iloc[i], data_for_graph['Y09'].iloc[i], data_for_graph['Y12'].iloc[i], data_for_graph['Y16'].iloc[i], data_for_graph['Y17'].iloc[i]]))
len(new_Y_18)

train.loc[:4319 ,['Y18']] = new_Y_18
X_train_Y18 = train.loc[:, ['X00', 'X07', 'X11','X28', 'X31', 'X32', 'X34']]
Y_train_Y18 = train['Y18'].astype('float64')

GridSearchCV를 활용하여 LGBMRegressor()의 최적의 파라미터를 구하였습니다.

from sklearn.model_selection import GridSearchCV

def get_best_params(model, params):
    grid_model = GridSearchCV(model, param_grid=params, scoring='neg_mean_squared_error', cv=5)
    grid_model.fit(X_train_Y18, Y_train_Y18)
    rmse = np.sqrt(-1* grid_model.best_score_)
    print('최적 평균 RMSE 값:', np.round(rmse, 4))
    print('최적 파라미터:', grid_model.best_params_)
    
    return grid_model.best_estimator_
lgb_for_best_Y18_model = LGBMRegressor()
lgb_param_grid = { 
    'n_estimators' : [300, 400, 500, 600, 700,  800, 900, 1000], 
    'max_depth' : [5, 10],
    'learning_rate' : [0.001, 0.005, 0.007, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1]
    }
best_lgb_param_Y18_model = get_best_params(lgb_for_best_Y18_model, lgb_param_grid)

X_test = test.loc[:, ['X00', 'X07', 'X11','X28', 'X31', 'X32', 'X34']]
lgb_with_best_params_for_predict_Y18_after80days = LGBMRegressor(learning_rate=0.01, max_depth=10, n_estimators=400)
lgb_with_best_params_for_predict_Y18_after80days.fit(X_train_Y18, Y_train_Y18)
predict = lgb_with_best_params_for_predict_Y18_after80days.predict(X_test)
predict_labels = predict


ids = list(test['id'])
print(len(ids))

submission_dic = {"id":ids, "Y18":predict_labels}
submission_df = pd.DataFrame(submission_dic)
submission_df.to_csv("dacon_temp_sub_05_1.csv", index=False)

결과

 

두번째 시도

두번째는 모든 기상청 데이터를 활용해 보았습니다.

Y18은 첫번째와 동일하게 Y18의 앞쪽 30분간의 없는 데이터를 Y06, Y09, Y12, Y16, Y17 의 평균으로 채워넣었습니다.

X_train_Y18 = train.loc[:, ['X00', 'X01', 'X02', 'X03', 'X04', 'X05', 'X06', 'X07', 'X08',
       'X09', 'X10', 'X11', 'X12', 'X13', 'X15', 'X17', 'X18',
       'X20', 'X21', 'X22', 'X23', 'X24', 'X25', 'X26', 'X27', 'X28',
       'X29', 'X30', 'X31', 'X32', 'X33', 'X34', 'X35', 'X36', 'X37', 'X38',
       'X39']]
Y_train_Y18 = train['Y18'].astype('float64')
best_lgb_param_Y18_model = get_best_params(lgb_for_best_Y18_model, lgb_param_grid)

X_test = test.loc[:, ['X00', 'X01', 'X02', 'X03', 'X04', 'X05', 'X06', 'X07', 'X08',
       'X09', 'X10', 'X11', 'X12', 'X13', 'X15', 'X17', 'X18',
       'X20', 'X21', 'X22', 'X23', 'X24', 'X25', 'X26', 'X27', 'X28',
       'X29', 'X30', 'X31', 'X32', 'X33', 'X34', 'X35', 'X36', 'X37', 'X38',
       'X39']]
lgb_with_best_params_for_predict_Y18_after80days = LGBMRegressor(learning_rate=0.1, max_depth=10, n_estimators=900)
lgb_with_best_params_for_predict_Y18_after80days.fit(X_train_Y18, Y_train_Y18)
predict = lgb_with_best_params_for_predict_Y18_after80days.predict(X_test)
predict_labels = predict


ids = list(test['id'])
print(len(ids))

submission_dic = {"id":ids, "Y18":predict_labels}
submission_df = pd.DataFrame(submission_dic)
submission_df.to_csv("dacon_temp_sub_06_1.csv", index=False)

결과

 

세번째 시도

이번엔 기상청 데이터에서 기온데이터만 사용해보았습니다.

Y18은 첫번째와 동일하게 Y18의 앞쪽 30분간의 없는 데이터를 Y06, Y09, Y12, Y16, Y17 의 평균으로 채워넣었습니다.

X_train_Y18 = train.loc[:, ['X00', 'X07', 'X28','X31', 'X32']]
Y_train_Y18 = train.loc[:, ['Y18']]
X_test = test.loc[:, ['X00', 'X07', 'X28','X31', 'X32']]
best_lgb_param_Y18_model = get_best_params(lgb_for_best_Y18_model, lgb_param_grid)

lgb_with_best_params_for_predict_Y18_after80days = LGBMRegressor(learning_rate=0.005, max_depth=5, n_estimators=700)
lgb_with_best_params_for_predict_Y18_after80days.fit(X_train_Y18, Y_train_Y18)
predict = lgb_with_best_params_for_predict_Y18_after80days.predict(X_test)
predict_labels = predict


ids = list(test['id'])
print(len(ids))

submission_dic = {"id":ids, "Y18":predict_labels}
submission_df = pd.DataFrame(submission_dic)
submission_df.to_csv("dacon_temp_sub_06_2.csv", index=False)

결과

 

네번째 시도

이번에는 Y06, Y07, Y09, Y10, Y11, Y12, Y15, Y16, Y17를 평균낸 값을 Y18로 사용해보았습니다.

기상청 데이터는 전체 다 사용해보았습니다.

data_for_graph2 = train.loc[:, ['Y06', 'Y07', 'Y09', 'Y10', 'Y11','Y12','Y15', 'Y16', 'Y17']].dropna()
plt.figure(figsize=(20, 10))
plt.plot(data_for_graph2)

import numpy as np
new_Y_182 = []
for i in range(len(data_for_graph2['Y06'])):
  new_Y_182.append(np.mean([data_for_graph2['Y06'].iloc[i], data_for_graph2['Y07'].iloc[i], data_for_graph2['Y09'].iloc[i], data_for_graph2['Y10'].iloc[i], data_for_graph2['Y11'].iloc[i],data_for_graph2['Y12'].iloc[i], data_for_graph2['Y15'].iloc[i],data_for_graph2['Y16'].iloc[i], data_for_graph2['Y17'].iloc[i]]))
len(new_Y_182)
train2.loc[:4319 ,['Y18']] = new_Y_182
X_train_Y182 = train2.loc[:, ['X00', 'X01', 'X02', 'X03', 'X04', 'X05', 'X06', 'X07', 'X08',
       'X09', 'X10', 'X11', 'X12', 'X13', 'X15', 'X17', 'X18',
       'X20', 'X21', 'X22', 'X23', 'X24', 'X25', 'X26', 'X27', 'X28',
       'X29', 'X30', 'X31', 'X32', 'X33', 'X34', 'X35', 'X36', 'X37', 'X38',
       'X39']]
Y_train_Y182 = train2['Y18'].astype('float64')
from sklearn.model_selection import GridSearchCV

def get_best_params2(model, params):
    grid_model = GridSearchCV(model, param_grid=params, scoring='neg_mean_squared_error', cv=5)
    grid_model.fit(X_train_Y182, Y_train_Y182)
    rmse = np.sqrt(-1* grid_model.best_score_)
    print('최적 평균 RMSE 값:', np.round(rmse, 4))
    print('최적 파라미터:', grid_model.best_params_)
    
    return grid_model.best_estimator_
best_lgb_param_Y18_model = get_best_params2(lgb_for_best_Y18_model, lgb_param_grid)

X_test = test.loc[:, ['X00', 'X01', 'X02', 'X03', 'X04', 'X05', 'X06', 'X07', 'X08',
       'X09', 'X10', 'X11', 'X12', 'X13', 'X15', 'X17', 'X18',
       'X20', 'X21', 'X22', 'X23', 'X24', 'X25', 'X26', 'X27', 'X28',
       'X29', 'X30', 'X31', 'X32', 'X33', 'X34', 'X35', 'X36', 'X37', 'X38',
       'X39']]
lgb_with_best_params_for_predict_Y18_after80days = LGBMRegressor(learning_rate=0.05, max_depth=10, n_estimators=1000)
lgb_with_best_params_for_predict_Y18_after80days.fit(X_train_Y182, Y_train_Y182)
predict = lgb_with_best_params_for_predict_Y18_after80days.predict(X_test)
predict_labels = predict


ids = list(test['id'])
print(len(ids))

submission_dic = {"id":ids, "Y18":predict_labels}
submission_df = pd.DataFrame(submission_dic)
submission_df.to_csv("dacon_temp_sub_06_3.csv", index=False)

결과

 

[공공] AI프렌즈 시즌1 온도 추정 경진대회

출처 : DACON - Data Science Competition

dacon.io

Comments