(25位)SIGNATE SMBC Group GREEN×DATA Challenge 2024 コンペの振り返り
SIGNATE SMBC Group GREEN×DATA Challenge 2024コンペティションに参加いたしました。
フォーラムでの交流から多くのことを学び結果に活かせたコンペでした。
コンペの基本的な流れが固まったので備忘録として公開します。
コンペに関して
- URL: https://signate.jp/competitions/1491
- タスク
- 2010年から2013年の有害物質排出量(TRI)や温室効果ガス排出量(GHG)などを基に2014年のGHG排出量を予測する
- 回帰分析タスク
- 化学はオーダーの精度で考えるらしいので、EDAでは常用対数でプロットする。
- 2010年から2013年の有害物質排出量(TRI)や温室効果ガス排出量(GHG)などを基に2014年のGHG排出量を予測する
- 評価関数
\textrm{RMSLE} \equiv \frac{1}{n} \sum_i{\left( \ln{(y_i + 1)} - \ln{(\hat{y}_i + 1)} \right)^2} -
と書き直すことができるので、誤差は割合で考えている。\textrm{RMSLE} = \frac{1}{n} \sum_i{\left( \ln{\frac{y_i + 1}{\hat{y}_i + 1}} \right)^2} - 推定値が真値の2倍でも1/2倍でも同程度の誤差と評価される。
- 真値が小さいデータほど誤差が大きくなりやすい。
- RMSE でも真値が小さいデータの誤差が大きくなるのでRMSLEのままでよい。
- 他の方の記録(大体時系列順)
事前調査
- kaggleデータ
- US Facility-Level Air Pollution (2010-2014)
- https://www.kaggle.com/datasets/jaseibert/us-facilitylevel-air-pollution-20102014?select=Revised.csv
- License CC0: Public Domain
- 親会社の情報などはコンペデータに含まれていない。
- カテゴリ型特徴量はコンペデータと共通でTRIとGHGだけ生成している
- コンペデータとオリジナルデータとで分布が異なる
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前期比の層別フラグ(追加) | 他 | - | - | - | - | - | 交差検証で使用 |
差分や前期比は元の特徴量で計算する。
理由は対数変換した差分と前期比の情報は相関が強いからである。
モデルの学習
Akash PB さんの公開ノートブックを使わせていただきました。
途中まで公開ノートブックのHistGradientBoostingRegressorやLightGBM、XGBoost、CatBoostを使用していたがハイパーパラメータの調整が上手くいかなかったのでAutoMLに切り替えた。
交差検証の分割数は15と75。
他にも5, 30, 50, 100, 200, LOOCVを試してこの2つがちょうどよかった。
LOOCVは過学習をしたわりにOOFの誤差が0.5しかでなかった。
テストデータの推定値は各Foldの推定値の算術平均値を計算した。
対数変換した目的変数の推定値の算術平均であるため、最終的な推定値は幾何平均で計算される。
外れ値に強い幾何平均であることも予測精度が安定したことにつながったとみられる。
幾何平均であることの確認は、
とあらわされるためである。
後処理
テストデータの推定値に訓練データの残差の平均値を加えた後でexpm1
処理で逆変換した。
である。
また、13年度のGHGに対する推定値が100倍越えあるいは100分の1未満の場合、それぞれ100倍あるいは100分の1に修正する。
今後の課題
モデルミックスを積極的に試したい。
最後の最後で2014年の前期比を学習して2013年のGHGに前期比をかけたモデルと普通に2014年のGHGを推定したモデルのミックスを試したが、検証不足で最終サブミットに選択できなかった。
今回のデータセットはとにかく頑健性が必要なので、モデルミックスで推定値の外れ値を薄めることが重要だと分かった。
Optunaのハイパーパラメータ調整をうまく使えるようになりたい。
どうも過学習してしまう。
Scikit-leanのRandomForestやGradientBoostingRegressorなどの基本的なモデルで良い推定ができるようになりたい。
合成データでは難しいかもしれないが機械学習の基礎力(EDA・前処理)を高めていけば基本的なモデルでも高評価を得られるかもしれない。
おまけ 他のコンペの入賞者レポートを見て使えるアイデアがないか調べる。
時系列としては事前調査とEDAの辺りで他のコンペの調査もしています。
SIGNATE Cup 2024
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
学生1位:- 予測: seed averaging
- 前処理: サブセットを作成してその値が元データにあるかをエンコーディングする
https://static.signate.jp/competitions/1376/summaries/SIGNATECup_worker_2nd.pdf
社会人2位:適用は難しい
https://static.signate.jp/competitions/1376/summaries/SIGNATECup_student_2nd.pdf
学生2位:適用は難しい
https://static.signate.jp/competitions/1376/summaries/SIGNATECup_worker_3rd.pdf
社会人3位:- 前処理: 欠損値補完
https://static.signate.jp/competitions/1376/summaries/SIGNATECup_student_3rd.pdf
学生3位:- 前処理: 欠損値をlightGBMで補完する
SIGNATE Career Up Challenge【モデリング部門】:中古車の価格予測チャレンジ
https://static.signate.jp/competitions/1055/summaries/1st place solution2.pdf
1位:- 評価関数: MAPE: 価格の安いものを大きく外さない予測アルゴリズム
- 特徴量:水準数が多い場合Target-encodignが効果的
- 学習:Fold毎のカテゴリ変数割合を揃える
- 後処理: 予測値のaffine変換
https://static.signate.jp/competitions/1055/summaries/___________(Final).pdf
2位:- 前処理: 地域から州を補完する
- 学習: 損失関数をMAPEとする
- 学習: 目的変数の分布を揃える
- 学習: 目的変数の山のいずれに所属するかを予測して、それぞれの山ごとのモデルで予測する
- 予測: ハイパーパラメータの異なる複数のモデルをアンサンブルする
SIGNATE Student Cup 2023
SIGNATE Career Up Challenge【モデリング部門】:中古車の価格予測チャレンジ、と同じ
SIGNATE Student Cup 2022【予測部門
自然言語系のため、参考にできない
ソニーグループ合同 データ分析コンペティション(for Recruiting)
https://static.signate.jp/competitions/624/summaries/1位_pokapokalemon様.pdf
1位:- 前処理: k-means法によるクラスタリング値を特徴量に追加
- 前処理: 首都との距離
- 前処理: ラグ特徴量
- 前処理: 外れ値フラグ
https://static.signate.jp/competitions/624/summaries/3位_yayaya様.pdf
3位:- 前処理: 目的変数(PM2.5)を空間的・時間的にうまく集約すること
- 寄与せず: ガウス過程回帰による空間上の目的変数の分布予測
- 寄与せず: k-meansで推定したクラスタ
SIGNATE Student Cup 2021春【予測部門】
https://static.signate.jp/competitions/449/summaries/【予測部門1st】 Ka28様.pdf
1位:- その他: k-meansでの各クラスタからの距離特徴量
https://static.signate.jp/competitions/449/summaries/【予測部門2nd】 でるぶ様.pdf
2位:- 学習: GBDTは特徴量を増やしてもOK
- 前処理: GBDT系が加減乗除の関係をとらえるのが苦手なため、四則演算を加える
- 前処理: RnakGauss(順序型でガウス分布に近い分布に変換する)
- 特徴量選択: null importance
Discussion