このリポジトリは、Kaggle American Express - Default Prediction コンペティションで使用したコードの置き場です。
特徴量生成コードとモデル訓練用コードを分離し、訓練の際に使用する特徴量をconfig.ymlから指定する方式をとることで、使いやすさの向上とデータロードの効率化を図った。
本コンペでは、特徴量生成に膨大な時間を要するため、特徴量生成コードと学習用コードと推論用コードを分離している。
script/feature_engineering 内に推論用コードを記述する。具体的には
- 同階層内で新しい.pyファイルを作成する
- 同ファイルでfeature_engineering.py/feature_engineering クラスを継承した新規クラスを作成する
- 継承先の create_features メソッド内で特徴量生成のためのロジックを記述し、保存したいデータフレームとカラムを返却する
- main() 関数内で新規クラスのインスタンスを作成し、get_dataset(), run()メソッドを呼び出す
- if name == 'main': main() などとして、ファイル内でmain()を呼び出す
- 同ファイルを実行する とすることで、data/feature_groups/{method_name}/ にカラムごとの特徴量が生成される。
script/{model_name}/exp{n}/train.py に学習用コードを記述する。特徴量はカラムごとに保存されているので、使用する特徴量を選択し列方向にマージする必要がある。 本リポジトリでの学習用コードでは、特徴量をリストにappendした後にpandas.DataFrameに変換する。さらに、confing.ymlに使用する特徴量もしくは特徴量グループを 指定することができるため、高速に実験を行うことができた。また、Optunaによる最適化を行うための設定を追加した。
学習部分で使用したデータに対応する推論データを用いて推論を行うことができる。