Kaggle - Santander Product Recommendation1の1位解法2の調査記事です.
Title: #1 solution
Author: idle_speculation
Kaggle Discussion: https://www.kaggle.com/c/santander-product-recommendation/discussion/26809
開発環境
- i7-5820K
- GTX-970
- 64GB RAM
特徴量
- 製品のlag, 製品登場から期間,製品の平均,最後の製品購入からの時間など
- 製品以外でのlagや変更(segmento, ind_actividad_cliente, cod_prov, indrel_1mes, tiprel_1mes)
- 個別のモデルに対しては悪影響が出るけど,アンサンブルには役立つ特徴量: canal_entrada, segmento, cod_prov
モデル
- 12個のニューラルネット
- 8個のGBMモデル
GBMモデル
- 16種類の製品を対象とした17クラスの多項式モデル(フォーラムと若干異なる)
- 17番目のクラスは残り8つの製品の一つを追加するか否かを意味
- 様々な製品の追加は異なる目標での重複業を追加することによって行う??
- 重複行は相互の追加された製品の数で重み付け
- LightGBMだと高速なので良かった.
- 期間や特徴量の組み合わせによってモデル間に差を作った.
NNモデル
- 製品の追加よりむしろ,対象の月に製品が存在することを見つけることが目的.(新製品であることか顧客が持ち去ったことの両方の意味あり)
- どちらかというと多クラス分類問題.
- 全てのネットワーク構造は同一.(512個のノードからなる隠れそう,16個の出力層)
- Kerasで実装.
後処理
-
各サブモデルは2015年6月,2015年12月,2016年6月で評価
-
特徴量fecha_datoは1〜18からなる数値情報として盛り込んでいる.
-
テストデータでの特徴量fecha_datoの修正は異なる月でスコアをつけることに影響している???
-
各モデルの2016年6月のスコアはrecaスコアを除いて保持されていて,2015年6月のスコアで置換
-
ccoスコアも同様に2015年12月のスコアで置換
-
サブモデルのスコアは前月に顧客が商品を買った場合は0に設定.
-
個別の製品スコアはpublic LBを用いて算出(単一の商品のみ提出することで算出)
-
最後はleaderboardの結果によって各モデルの重みを算出し,各モデルのアンサンブルを行った.
備考
- 最長モデルの学習時間は約10時間
- 前処理を全てRで行ったのでRAMが最大のボトルネックとなっていた
References
-
Kaggle, Santander Product Recommendation. ↩
-
idle_speculation, #1 solution. ↩