俺人〜OREGIN〜俺、バカだから人工知能に代わりに頑張ってもらうまでのお話

俺って、おバカさんなので、とっても優秀な人工知能を作って代わりに頑張ってもらうことにしました。世界の端っこでおバカな俺が夢の達成に向けてチマチマ頑張る、そんな小さなお話です。現在はG検定、E資格に合格し、KaggleやProbSpaceのコンペに参画しながら、Pythonや機械学習、統計学、Dockerなどの勉強中です。学習したことをブログにアウトプットすることで、自分の身に着けていきたいと思います。まだまだ道半ばですが、お時間がありましたら見て行ってください。

【9位解法】Solafune開催「夜間光データから土地価格を予測」の振り返り。

アジア初の衛星データ解析コンテストプラットフォーム「Solafune 」で開催された「夜間光データから土地価格を予測」に参加し、9位の成績を残せました!

賞金獲得はなりませんでしたが、前回開催の「衛星画像から空港利用者数を予測」の2位受賞に続き、連続でのToP10入でした。

今回のコンペは、使えるデータが実質2カラム分しかなく、特徴量の活用が非常に難しいコンペでした。全体的にShakeが発生していたのもこのあたりが影響しているのかなぁと思いました。

f:id:kanriyou_h004:20210408192910p:plain

f:id:kanriyou_h004:20210408192833p:plain


 

では、振り返って参りたいと思います。

1.全体構成

今回のコンペは、テーブルコンペなのですが、与えられた生の特徴量が少ないため、特徴量をいかに増やすかが考えどころでした。

あとは、CVの工夫と、2段のStacking、加重平均で構築していきました。

f:id:kanriyou_h004:20210408193239p:plain

2.前処理

前処理については、以下の通りで実施いたしました。
(この処理は、cha_kabuさんのベースモデルを参考にしました。)

【四則演算等】         

前処理

処理内容
Area

その地域の合計の光量が「SumLight」で、平均の光量が「MeanLight」であることから、「SumLight ÷ MeanLight」が、その地域の面積であるとみなし、特徴量としました。

MeanLightが63となった回数

MeanLightは「63」が上限値となっていて頭打ちとなっていたので、上限値の「63」を超えた回数を特徴量としました。

 【統計情報】

前処理

処理内容

PlaceIDをキーとした統計情報

PlaceIDをキーとして、min,max,median,mean,std,max-min,q75-q25を特徴量として追加しました。

Yearをキーとした統計情報 Yearをキーとして、min,max,median,mean,std,max-min,q75-q25を特徴量として追加しました。

 【その他】

前処理

処理内容

同一PlaceID内の年ごとの差分

同一のPlaceID内で、年毎のMeanLighetの差分,年毎のSumLighetの差分を特徴量として追加しました。

同一PlaceID内の年ごとの差分

同一のPlaceID内で、年毎のMeanLighetをShiftした値,年毎のSumLighetをSiftした値を特徴量として追加しました。

同一PlaceID内の相関係数

同一のPlaceID内で、MeanLighet,SumLighet,Areaと年の相関係数を特徴量として追加しました。

ピボットテーブルを用いた特徴量

pandasのpivot_tableを使って、特徴量を水増ししたうえで、sklearn.decompositionのPCAを利用して、特徴量の選択を実施しました。

3.モデル構築

 今回は、モデル構築には、2階層のStackingでモデル構築をしました。

1層目は、LighetGBMで構築し、検証はGroupKfoldを用いました。

2層目は、MLPRegressorで構築し、検証はホールドアウト法を用いました。

1層目、2層目ともに、いろいろなモデルを試してみたのですが、あまり精度のよいモデルを構築できなかったのが残念でした。もっと多様なモデルで精度が出すことができていれば、もう少し上位を狙えたかもしれません。

(通算300個以上のモデルを作って、そのうち130個以上の提出を実施しました。後半はほぼ毎日提出しました。)

最終的には、以下の4つの組み合わせを採用しました。

1層目

  • LGBM GroupKfold Fold数5 × 6モデル
  • LGBM GroupKfold Fold数11 × 1モデル
  • エッジ抽出画像→ResNet-34 モデル3
  • 多重化画像→efficientnet-b7 モデル4

2層目

  • MLPRegressor ホールドアウト × 2モデル

その後、この2つの組み合わせで加重平均をとりました。

f:id:kanriyou_h004:20210408193239p:plain

4.感想

今回のコンペは、カラム数が非常に少ないデータから特徴量を作り出すというアプローチの勉強になりました。

画像データの様にデータ量が多くないので、学習に時間がかからないという利点があるのですが、精度を出すための特徴量づくり、特徴量選択が非常に難しかったです。

いろいろなみなさんのベースラインを拝見しながら、よいモデルを作成することができました。

他の皆さんのベースライン等は以下にまとめました。とても勉強になったベースラインばかりでした。

oregin-ai.hatenablog.com

5.謝辞

最後となってしまいましたが、本コンペを運営してくださいました、Solafune の運営の皆様、一緒にコンペに取り組んでいらっしゃった皆様、Twitter上でやりとりを実施させていただいた皆様に心より感謝申し上げます。

いつもながら、宇宙からのデータについて分析できるというのは、とてもワクワクします。今回学ばせていただいた事項を、社会貢献に活用できるよう引き続き精進してまいりたいと思います。

 

【過去記事】

G検定、E資格の取得から、これまでに取り組んできた道のりは以下にまとめております。何かのご参考にしていただければ幸いです。

oregin-ai.hatenablog.com

oregin-ai.hatenablog.com