🦆

(25位)SIGNATE SMBC Group GREEN×DATA Challenge 2024 コンペの振り返り

2024/12/07に公開

SIGNATE SMBC Group GREEN×DATA Challenge 2024コンペティションに参加いたしました。
フォーラムでの交流から多くのことを学び結果に活かせたコンペでした。
コンペの基本的な流れが固まったので備忘録として公開します。

コンペに関して

事前調査

EDA

  • データ数
    • 学習用データ (4655, 22)
    • 評価用データ (2508, 21)
  • 目的変数の分布
    • 常用対数のヒストグラムには3つのピークがある。
    • kaggleデータには分布が1つしかない
  • 特徴量との相関
    • 前年のGHGとの両対数グラフには相関がある
    • kaggleデータよりもばらつきが大きい
      • 過学習を抑えることを常に意識すべきデータセット
  • カテゴリ変数で層別した分布
    • Power Plantsであるか否かで層別した目的変数の常用対数のヒストグラムより、kaggleデータはPower PlantsのGHGの最大値は大きいが、コンペデータにその特徴はない。
      • カテゴリ変数のGolden featureを探すよりも安定したモデルを探した方が良い

前処理

カラム 種類 ユニークカラム削除 対数変換 前期との差分 前期比 大カテゴリの抽出 使用
無名 id - - - - - 交差検証で使用
FacilityName Categorical feature (C) Yes(train 4,531/ test 2,462 ) - - - - -
Latitude Numerical features (N) - - - - - Yes
Longitude N - - - - - Yes
LocationAddress C Yes(4,436 / 2,387) - - - - -
City C Yes(2,588 / 1,647) - - - - -
State C No(54, 54) - - - - -
ZIP C Yes(3,758 / 2,152) - - - - -
County C Yes(1,166 / 866) - - - - -
FIPScode C Yes(StateとCountyの連結に等しい) - - - - -
PrimaryNAICS C/N - - - - Yes(先頭2桁) Yes
SecondPrimaryNAICS/N C - - - - - -
IndustryType C - - - - Yes(カンマ5分割) -
TRI_Air_Emissions_10_in_lbs N - - - - - Yes
TRI_Air_Emissions_11_in_lbs N - - Yes Yes - Yes(差分,前期比も使用)
TRI_Air_Emissions_12_in_lbs N - - Yes Yes - Yes(差分,前期比も使用)
TRI_Air_Emissions_13_in_lbs N - - Yes Yes - Yes(差分,前期比も使用)
GHG_Direct_Emissions_10_in_metric_tons N - - - - - Yes
GHG_Direct_Emissions_11_in_metric_tons N - - Yes Yes - Yes(差分,前期比も使用)
GHG_Direct_Emissions_12_in_metric_tons N - - Yes Yes - Yes(差分,前期比も使用)
GHG_Direct_Emissions_13_in_metric_tons N - - Yes Yes - Yes(差分,前期比も使用)
GHG_Direct_Emissions_14_in_metric_tons N - Yes - Yes - 目的変数
test_flag(追加) - - - - - 前処理コードを1回で済ませるために使用
14年のGHG前期比の層別フラグ(追加) - - - - - 交差検証で使用

差分や前期比は元の特徴量で計算する。
理由は対数変換した差分と前期比の情報は相関が強いからである。

\begin{align*} \ln{(x_i + 1)} - \ln{(y_i + 1)} &= \ln{ \frac{x_i + 1}{y_i + 1} }\\ \ln{(x_i + 1)} / \ln{(y_i + 1)} & \end{align*}

モデルの学習

Akash PB さんの公開ノートブックを使わせていただきました。
途中まで公開ノートブックのHistGradientBoostingRegressorやLightGBM、XGBoost、CatBoostを使用していたがハイパーパラメータの調整が上手くいかなかったのでAutoMLに切り替えた。

交差検証の分割数は15と75。
他にも5, 30, 50, 100, 200, LOOCVを試してこの2つがちょうどよかった。
LOOCVは過学習をしたわりにOOFの誤差が0.5しかでなかった。

テストデータの推定値は各Foldの推定値の算術平均値を計算した。
対数変換した目的変数の推定値の算術平均であるため、最終的な推定値は幾何平均で計算される。
外れ値に強い幾何平均であることも予測精度が安定したことにつながったとみられる。

幾何平均であることの確認は、 z_i \equiv \ln{(y_i + 1)} の推定値 \hat{z}_i \equiv \ln{(\hat{y}_i + 1)} とすると、 id i のテストデータの推定値は、

\frac{1}{n_{kfold}} \sum_k \hat{z}_{i, k} = \ln{ \left( \prod_k (\hat{y}_{i, k} + 1) \right)^{\frac{1}{n}}}

とあらわされるためである。

後処理

テストデータの推定値に訓練データの残差の平均値を加えた後でexpm1処理で逆変換した。
z_i \equiv \ln{(y_i + 1)} の推定値 \hat{z}_i \equiv \ln{(\hat{y}_i + 1)} の残差の平均値を E[z - \hat{z}] とすると、最終的な推定値は

\hat{y}_i = \exp{(\hat{z}_i + E[z - \hat{z}])} - 1

である。

また、13年度のGHGに対する推定値が100倍越えあるいは100分の1未満の場合、それぞれ100倍あるいは100分の1に修正する。

今後の課題

モデルミックスを積極的に試したい。
最後の最後で2014年の前期比を学習して2013年のGHGに前期比をかけたモデルと普通に2014年のGHGを推定したモデルのミックスを試したが、検証不足で最終サブミットに選択できなかった。
今回のデータセットはとにかく頑健性が必要なので、モデルミックスで推定値の外れ値を薄めることが重要だと分かった。

Optunaのハイパーパラメータ調整をうまく使えるようになりたい。
どうも過学習してしまう。

Scikit-leanのRandomForestやGradientBoostingRegressorなどの基本的なモデルで良い推定ができるようになりたい。
合成データでは難しいかもしれないが機械学習の基礎力(EDA・前処理)を高めていけば基本的なモデルでも高評価を得られるかもしれない。

おまけ 他のコンペの入賞者レポートを見て使えるアイデアがないか調べる。

時系列としては事前調査とEDAの辺りで他のコンペの調査もしています。

SIGNATE Cup 2024

https://signate.jp/competitions/1376/summary

社会人1位: https://static.signate.jp/competitions/1376/summaries/SIGNATECup_worker_1st.pdf

  • 前処理: 欠損値補完
  • 前処理: 値のクリッピング
  • 前処理: 相関近似値の計算
  • 前処理: 欠損を含むデータを削除する
  • 学習: 決定木の深さを1にする
  • 学習: モデルの学習率を1にする

学生1位: https://static.signate.jp/competitions/1376/summaries/SIGNATECup_student_1st.pdf

  • 予測: seed averaging
  • 前処理: サブセットを作成してその値が元データにあるかをエンコーディングする

社会人2位: https://static.signate.jp/competitions/1376/summaries/SIGNATECup_worker_2nd.pdf

適用は難しい

学生2位: https://static.signate.jp/competitions/1376/summaries/SIGNATECup_student_2nd.pdf

適用は難しい

社会人3位: https://static.signate.jp/competitions/1376/summaries/SIGNATECup_worker_3rd.pdf

  • 前処理: 欠損値補完

学生3位: https://static.signate.jp/competitions/1376/summaries/SIGNATECup_student_3rd.pdf

  • 前処理: 欠損値をlightGBMで補完する

SIGNATE Career Up Challenge【モデリング部門】:中古車の価格予測チャレンジ

https://signate.jp/competitions/1055/summary

1位: https://static.signate.jp/competitions/1055/summaries/1st place solution2.pdf

  • 評価関数: MAPE: 価格の安いものを大きく外さない予測アルゴリズム
  • 特徴量:水準数が多い場合Target-encodignが効果的
  • 学習:Fold毎のカテゴリ変数割合を揃える
  • 後処理: 予測値のaffine変換

2位: https://static.signate.jp/competitions/1055/summaries/___________(Final).pdf

  • 前処理: 地域から州を補完する
  • 学習: 損失関数をMAPEとする
  • 学習: 目的変数の分布を揃える
  • 学習: 目的変数の山のいずれに所属するかを予測して、それぞれの山ごとのモデルで予測する
  • 予測: ハイパーパラメータの異なる複数のモデルをアンサンブルする

SIGNATE Student Cup 2023

https://signate.jp/competitions/1051

SIGNATE Career Up Challenge【モデリング部門】:中古車の価格予測チャレンジ、と同じ

SIGNATE Student Cup 2022【予測部門

https://signate.jp/competitions/735

自然言語系のため、参考にできない

ソニーグループ合同 データ分析コンペティション(for Recruiting)

https://signate.jp/competitions/624/summary

1位: https://static.signate.jp/competitions/624/summaries/1位_pokapokalemon様.pdf

  • 前処理: k-means法によるクラスタリング値を特徴量に追加
  • 前処理: 首都との距離
  • 前処理: ラグ特徴量
  • 前処理: 外れ値フラグ

3位: https://static.signate.jp/competitions/624/summaries/3位_yayaya様.pdf

  • 前処理: 目的変数(PM2.5)を空間的・時間的にうまく集約すること
  • 寄与せず: ガウス過程回帰による空間上の目的変数の分布予測
  • 寄与せず: k-meansで推定したクラスタ

SIGNATE Student Cup 2021春【予測部門】

https://signate.jp/competitions/449/summary

1位: https://static.signate.jp/competitions/449/summaries/【予測部門1st】 Ka28様.pdf

  • その他: k-meansでの各クラスタからの距離特徴量

2位: https://static.signate.jp/competitions/449/summaries/【予測部門2nd】 でるぶ様.pdf

  • 学習: GBDTは特徴量を増やしてもOK
  • 前処理: GBDT系が加減乗除の関係をとらえるのが苦手なため、四則演算を加える
  • 前処理: RnakGauss(順序型でガウス分布に近い分布に変換する)
  • 特徴量選択: null importance

Discussion