「SIGNATE : ソニーグループ合同 データ分析コンペティション(for Recruiting)」109th解法振り返り

今回のコンペは、世界各都市の大気観測データ(観測日時、位置情報、PM2.5以外の大気物質濃度)、気象情報(天気、湿度、風速等)、及び必要に応じて外部データを用いて、特定の日時・都市における「PM2.5濃度」を予測するというものでした。

結果としてはメダル圏外でしたが、久々のテーブルデータコンペ参加で、他の方の解法から学べることが多いと感じるコンペでした。

データ内容等については、コンペを参照してください。
https://signate.jp/competitions/624


考察
今回のコンペでは、日付や都市ごとの緯度経度が設けられていますが、都市によって観測日数が大きく異なったり、予測対象が新しい観測地点の「PM2.5濃度」だったりするので、単純に時系列問題として解くのも難しく、地理的なタスクとして解くのも少し工夫が必要だったように感じます。


以下は私の解法です。


モデル
3つの特徴量が違うモデルを、それぞれLabelEncodingとTargetEncodingで得た結果を単純平均して、
最後にその結果を重み付けアンサンブル。

1LightGBM(LabelEncoding('Country')、TargetEncoding('Country'))
2LightGBM(LabelEncoding('utm_zone')、TargetEncoding('utm_zone'))
3LightGBM(encodingは1同様、特徴量に外部データとしてco2、population、GDPを追加)


パラメータサーチはOptuna + 手動


使用した特徴量
モデル共通の特徴量
・配布データはそのまま使用
・日付データ('year','month',day''weekday'のsin,cos変換)
・特徴量間でのdiff,ratio


モデルで異なる特徴量
・緯度経度からUTMゾーンの計算
・'Country'・'month'をkeyとした集約統計量(pm25_mid以外、mean, max, min, std, var)(DIKNさんのノートをほぼ使用しています)
・'utm_zone'・'month'をkeyとした集約統計量(pm25_mid以外、mean, max, min, std, var)


試した特徴量
・階層型クラスタリングによる都市のグループ分け(Yasui Hashimotoさんのノートを参考にしました)
・温位、持ち上げ凝結高度の気温などの気象要素への変換
・LocalOutlierFactorを用いた外れ値の除去
・エネルギー供給量(外部データ)


Validation:KFold (n_splits=5)


最後に
数値データが主なテーブルデータコンペで、楽しく参加することができました。
一方、典型的な手法としては色々試してはいたのですが、集約やクラスタリング、kfoldの方法、target_encodingの方法など、データの特性に合わせて行うことができていないと感じました。

私の場合、target_encodingを単純にCountryごとに行っていたりしたので、時系列、地理的な情報を意識して行ったほうがよかったかもしれません。

また、お手軽さからLightGBMばかり使っていましたがデータの不均一性を補填するという意味でも、複数のモデルを使用して、実験することを覚えようと思います。blendingやstackingも使い慣れていきたいです。

一緒にコンペに取り組んでくださった皆様ありがとうございました。
最後に、主催者のSONY様、SIGNATEの運営担当者様、コンペ開催・運営ありがとうございました。