tacchan7412 / gci2017_team12

0 stars 0 forks source link

どのモデルが良いか #3

Open kenoharada opened 7 years ago

kenoharada commented 7 years ago

調べたモデルと使った特徴量を共有しよう! スコアも一緒に書いてね

kenoharada commented 7 years ago

モデルを試したスコア 特徴量は以下の通りで一致させた  特徴量について試行錯誤した人がいたら共有してもらいたい X = train_df[train_df["price_pm"]>-1].drop(["datetime",'dayofweek',"DayofMonth","Month","y","year"], axis=1) Y = train_df[train_df["price_pm"]>-1]["y"] Index(['client', 'close', 'price_am', 'price_pm', 'year_num', 'M_1', 'M_2', 'M_3', 'M_4', 'M_5', 'M_6', 'M_7', 'M_8', 'M_9', 'M_10', 'M_11', 'M_12', 'DM_1', 'DM_2', 'DM_3', 'DM_4', 'DM_5', 'DM_6', 'DM_7', 'DM_8', 'DM_9', 'DM_10', 'DM_11', 'DM_12', 'DM_13', 'DM_14', 'DM_15', 'DM_16', 'DM_17', 'DM_18', 'DM_19', 'DM_20', 'DM_21', 'DM_22', 'DM_23', 'DM_24', 'DM_25', 'DM_26', 'DM_27', 'DM_28', 'DM_29', 'DM_30', 'DM_31', 'DW_0', 'DW_1', 'DW_2', 'DW_3', 'DW_4', 'DW_5', 'DW_6'], dtype='object')

重回帰分析 pred_clf 11.376637316800000

xgboostで回帰モデル生成 pred_xgb mod = xgb.XGBRegressor() パラメーターはいじらず初期設定のまま 11.17721

ランダムフォレスト forest_pred from sklearn.ensemble import RandomForestRegressor モデル構築、パラメータはデフォルト forest = RandomForestRegressor() 11.48777

サポートベクターマシーン from sklearn.svm import SVR svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1) svr_lin = SVR(kernel='linear', C=1e3) svr_poly = SVR(kernel='poly', C=1e3, degree=3) y_rbf = svr_rbf.fit(X, Y).predict((test_df.drop(["datetime",'dayofweek',"DayofMonth","Month","year"], axis=1))) y_lin = svr_lin.fit(X, Y).predict((test_df.drop(["datetime",'dayofweek',"DayofMonth","Month","year"], axis=1))) y_poly = svr_poly.fit(X, Y).predict((test_df.drop(["datetime",'dayofweek',"DayofMonth","Month","year"], axis=1))) y_poly 12.50321 y_rbf #10.924218922800000

Kerasによる回帰分析 estimator = KerasRegressor(build_fn=deep_reg_model, nb_epoch=100, batch_size=10, verbose=0) X = train_df[train_df["price_pm"]>-1].drop(["datetime",'dayofweek',"DayofMonth","Month","y","year"], axis=1) Y = train_df[train_df["price_pm"]>-1]["y"] X = np.array(X) Y = np.array(Y) estimator.fit(X,Y) 12.17040

y_rbfとpred_xgbも平均 test_df["y"] = (y_rbf + pred_xgb)/2 10.22758

test_df["y"] = (y_rbf + pred_xgb+forest_pred)/3 test_df["y"][test_df["close"]==1] = int(0) submission = pd.concat([test_df.datetime, test_df.y], axis=1) submission.to_csv("submission.csv", index=False,header=False) 10.29414

kuboshizuma commented 7 years ago

@kenoharada

コメントの書き方について

markdownを使うと見やすくなります。

僕が以前書いた記事なので参考にしてみて下さい↓ Qiita Markdown 書き方 まとめ

以下のような感じで。

あと、スコアはどのモデルがどれくらいの精度かまとめてくれると分かりやすいです。 あと、ベンチマーク等そのスコアがどれくらいいいのか分かるようにするといいと思います。 今回は評価関数がチーム内で共通認識はあるかと思いますが、記述しておいたほうがよいです。

モデルを試したスコア

特徴量は以下の通りで一致させた  特徴量について試行錯誤した人がいたら共有してもらいたい

X = train_df[train_df["price_pm"]>-1].drop(["datetime",'dayofweek',"DayofMonth","Month","y","year"], axis=1)
Y = train_df[train_df["price_pm"]>-1]["y"]
Index(['client', 'close', 'price_am', 'price_pm', 'year_num', 'M_1', 'M_2',
'M_3', 'M_4', 'M_5', 'M_6', 'M_7', 'M_8', 'M_9', 'M_10', 'M_11', 'M_12',
'DM_1', 'DM_2', 'DM_3', 'DM_4', 'DM_5', 'DM_6', 'DM_7', 'DM_8', 'DM_9',
'DM_10', 'DM_11', 'DM_12', 'DM_13', 'DM_14', 'DM_15', 'DM_16', 'DM_17',
'DM_18', 'DM_19', 'DM_20', 'DM_21', 'DM_22', 'DM_23', 'DM_24', 'DM_25',
'DM_26', 'DM_27', 'DM_28', 'DM_29', 'DM_30', 'DM_31', 'DW_0', 'DW_1',
'DW_2', 'DW_3', 'DW_4', 'DW_5', 'DW_6'],
dtype='object')

重回帰分析 pred_clf

11.376637316800000

xgboostで回帰モデル生成 pred_xgb

mod = xgb.XGBRegressor() パラメーターはいじらず初期設定のまま 11.17721

ランダムフォレスト forest_pred

from sklearn.ensemble import RandomForestRegressor モデル構築、パラメータはデフォルト forest = RandomForestRegressor() 11.48777

サポートベクターマシーン

from sklearn.svm import SVR
svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1)
svr_lin = SVR(kernel='linear', C=1e3)
svr_poly = SVR(kernel='poly', C=1e3, degree=3)
y_rbf = svr_rbf.fit(X, Y).predict((test_df.drop(["datetime",'dayofweek',"DayofMonth","Month","year"], axis=1)))
y_lin = svr_lin.fit(X, Y).predict((test_df.drop(["datetime",'dayofweek',"DayofMonth","Month","year"], axis=1)))
y_poly = svr_poly.fit(X, Y).predict((test_df.drop(["datetime",'dayofweek',"DayofMonth","Month","year"], axis=1)))

y_poly 12.50321 y_rbf #10.924218922800000

Kerasによる回帰分析

estimator = KerasRegressor(build_fn=deep_reg_model, nb_epoch=100, batch_size=10, verbose=0)
X = train_df[train_df["price_pm"]>-1].drop(["datetime",'dayofweek',"DayofMonth","Month","y","year"], axis=1)
Y = train_df[train_df["price_pm"]>-1]["y"]
X = np.array(X)
Y = np.array(Y)
estimator.fit(X,Y)

12.17040

y_rbfとpred_xgbも平均 test_df["y"] = (y_rbf + pred_xgb)/2 10.22758

test_df["y"] = (y_rbf + pred_xgb+forest_pred)/3
test_df["y"][test_df["close"]==1] = int(0)
submission = pd.concat([test_df.datetime, test_df.y], axis=1)
submission.to_csv("submission.csv", index=False,header=False)

10.29414

比較

スコアは確かMAEだよね? (目的関数はMAEに適しているものだよね?多分大丈夫だと思いますが)

モデル名 スコア
重回帰分析 11.38
xgboost 11.18
ランダムフォレスト 11.48
SVR y_poly 12.5
Keras 12.17

アンサンブル →どういう組み合わせがどうなったか表でまとめると良さそうですね。

kenoharada commented 7 years ago
モデル trainデータでの精度 MAE
重回帰分析 0.723709744601 11.3766373168
xgboost 0.8141972111396063 11.17721
ランダムフォレスト 0.95415671634964894 11.48777
SVR y_poly 0.80778731721020391 12.50321
SVR y_rbf 0.99993414425977334 10.9242189228

benchmarkのMAE 11.35637

kuboshizuma commented 7 years ago

@kenoharada

特徴量に関して

モデルに関して

kenoharada commented 7 years ago

時系列データの扱いをkaggleなどで見てみる

kenoharada commented 7 years ago

1年分だけのデータを学習させて予測データに少し値を足すというアプローチ 足す値は年毎にyの平均値を出し、回帰係数を計算しそれを足した MAEは9.0743250441