Why5

巷にあふれる情報(データ)をもとに"なぜ”、"なぜ”、"なぜ”、、、と掘り下げるブログです。現在は主にAIによる予測スキルの向上に励んでいます。

免責に関して:本サイトの情報により生じた如何なる損害についても、当方は責任を負いません。

SIGNATE ブルーカーボン・ダイナミクスを可視化せよ!

久しぶりのSIGNATEコンペ ブルーカーボン・ダイナミクスを可視化せよ! に参加しました。沖縄の過去時点の藻場状況を予測する内容です。扱えるデータの種類は多く人工衛星の数値データをメインに人工衛星の画像データまであります。私は画像データは使用しませんでした。数値データ(約1万4千項目)だけでお腹いっぱいでしたから。

進め方:まずはシンプルに目的変数の平均値を予測値として、第一次ベースライン(public LB:0.2004988)を設定、次に追加の特徴量なし、ほぼ全項目を使用してlightgbmで予測した第二次ベースライン(public LB:0.1987353)を本当のスタートラインとして旅の始まり。掛けたり割ったり、アンサンブルしたりと最終値(public LB:0.1767497 private LB:0.1829975)で72位/357人中でBronzeを獲得できました。めでたし、めでたし。

上位の人はしっかりと特徴量を追加して入賞してる人もあれば、シンプルに複数モデルを作成してLinear Quiz Blendingを活用しSilverを獲得している人(これはこれですごい。)もいました。どちらも参考になります。でも上位入賞の秘訣はやっぱりNever give upですかね。

 

追試 kaggle Home Credit Default Risk

コンペ上級者がどんな考え方でコンペを進めているのかを調べる目的で過去のコンペに挑戦。

今回はHome Credit Default Risk

ハウジングローンの信用評価の2値分類。

特徴、提供されたテーブルの多さ。

メインキーのSK_ID_CURRの下にSK_ID_BUEAU,SK_ID_PREVという別のキーがあり、それらをSK_ID_CURRにどううまくまとめて紐づけるかがポイント。

 

何事もステップを踏んでいかないと道に迷って(=どのモデルが良いかわからなる。)大切な時間を無駄にすることに最近気づいたので以下の順番で一歩ずつ進めた。

   applocation_train.csvのデータのみで追加の特徴量も作成せず。LightGBMの標準条件で評価した。スコア(ベースライン)は0.74113、これ以下の値であればそもそもモデルを作成する必要なしのベースとなる指標。この値を侮ってはいけません。いつもそこそこ良い値です。

過去にこれをやらずにこ特徴量をこねくり回したモデルを作ってあとでベースラインと比較すると負けてた経験が多数。

 あとは順繰りに独断と偏見で重要度が高いと思われるテーブルを処理して追加し、そのたびごとにスコアを確認。基本の処理は数字関係は基本統計量、必要に応じて四則計算、カテゴリーは横持ちを縦持ちに変換して使用。ここまででスコアは0.77702。

 特徴量の検討は一旦休止して、OptunaとCVでスコアアップを実施して0.7837、同じ特長量を使用してXGBoostでOptunaとCVしたところ0.78637までアップ。

 本当はここからもう一度、特徴量の検討を行い上位の仲間入りを目指すのが本番なんでしょうが、大変なエネルギーが必要になるので、これは追試なので上位人のソリューションを研究するフェーズに入ります。

 今回のトップスコアは0.80570、ブロンズ獲得するため最低でも0.79449のスコアが必要です。スコアの差は0.00812、大きいと感じるか小さいと感じるかは人それぞれか。 

 ソリューションを見て感じたのは特徴量の最適化のみでスコアを0.8まで上げていること、これまではアンサブルやCVでもっとスコアが上がるイメージだったのですがそうじゃないことがわかって少しびっくり。

 特徴量をどのように組み合わせたり、作り出したりするかが基本の基だということか。今回はデータから近似値ですが利子率を計算できたようでこれに気づいた人は大きくスコアをアップできたようです。近い特徴量は作っていたのですが、明確に利子率を計算することをわかった人間となんとなく作った人間の差でしょうか。業務を知っていることはやはり大きなメリットになるようです。

 ただ、業務を知らなくても知っている人がDiscussionに上げてくれるところがkaggleのすごいところでもあります。情報は頻繁にチェックする必要ありです。

 特徴量の絞り込みはBOOKで紹介した以下の書籍の中にいくつか紹介されていたのでおいおい試してみます。

 

why5.hatenablog.com

 

 

 

 

 

 

 

 

忘備録 colab CUDAバージョン固定

今度はcolabのCUDAが11へバージョンアップされたようでLightGBMのGPU版が動かなくなってしまった。
CUDAのバージョンを10へダウンさせるコード。↓

# https://zenn.dev/takeshita/articles/a02402e59d72a7
!wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
!sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
!sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
!sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"
!sudo apt-get update
!sudo apt-get -y installnvidia-driver-418
!sudo apt-get -y install cuda-10-2  #←デフォルトはcudaになってるので10.2をインストールするように書きかえる

!nvcc --version
!nvidia-smi

忘備録 colab LightGBM バージョン固定

最近、LightGBMが3.3.5.99へバージョンアップされてしまいOtunaが動かなくなったのを復旧するため、LightGBMのバージョンを3.3.2へバージョンダウンさせたコード。↓

!pip install lightgbm==3.3.2 --install-option=--gpu

最新版のlightGBMのGPU版をインストールするコード。↓

!git clone --recursive https://github.com/Microsoft/LightGBM
%cd /content/LightGBM/
!mkdir build
!cmake -DUSE_GPU=1 #avoid .
# # # !cmake -DUSE_CUDAP=1
!make -j$(nproc)
# !make -j4
!sudo apt-get -y install python-pip
!sudo -H pip install setuptools  scipy scikit-learn -U
# !sudo -H pip install setuptools pandas numpy scipy scikit-learn -U
%cd /content/LightGBM/python-package
!sudo python setup.py install --precompile

Book Kaggleで勝つデータ分析の技術

 Kaggleを始めたころ買った本です。

 しっかりとした著者が時間をかけ内容をまとめた本だと思います。

 この手の本は長く役に立つので重宝しています。

 当初はよく理解できなかったことも多々ありますが、時々思い出したようにページをめくると、こちらのスキルに合わせて”改めてそうだったのか”といまだに気づくことがあったり、”そうそうこういう手があったよな”とポイントを思い出したりといまだにお世話になっている次第です。

 最新の分析方法やモデルはKaggleのコンペ入賞者のコードやコメントから入手できますが、地味に必要となる重要な基礎知識はなかなか体系だってまとまっているところがないので重宝しています。

 

kaggle Playground Series - Season 3, Episode 8

kaggle Playground Series - Season 3, Episode 8です。

今回は宝石の価格予測(回帰)です。

この手の品物には馴染みがないので、ChatGPT君と話をしながら評価基準を勉強しました。ちなみにカラットは体積(大きさ)ではなく重さだそうです。体積だと思っていました。

馴染みのない話題は対話型のChatGPT君のほうがグーグルさんより頭に入ってきやすい気がします。

ピンポイントで深く調べるときはグーグルさんの方が良いかな。

 

■今回のポイントは特徴量の最適化です。

モデルのアンサンブルも少し。上位の人は何百のモデルを作るようで今はそこまでは能力がないので出来ることからこつこつと。(将来的にはモデルも順次増やしていきたいと思っている。)

宝石の3次元の寸法が与えられているので特徴量は掛けたり割ったりいろいろ作ってみて選別していきました。

 

宝石なので上から見て大きなもの(=見栄えがよい??)の価値が高いように思いました。

■結果 250/734位(上位34%)もうひと頑張りが必要か。

 

kaggle Playground Series - Season 3, Episode 7

kaggle Playground Series - Season 3, Episode 7です。

今回はキャンセルの予測(二項分類)です。

データは前回のようにデータに変な偏りはありませんでした。

この比率が正しいとするなら、キャンセル率は結構高いです。

比率が似通っているので予測しやすいかなと思いましたがその通り実際のスコアもトップスコアは0.92でした。

 

■ポイントにしたのは2つ

  • 特徴量の最適化

  特定日付でキャンセルが増えるのではないかと思い、データから曜日、年始からの経過日(YTD)を追加。

  人数構成は合計人数、子供の比率、大人の比率を追加。

  結果は曜日、YTDとも不要で、もともとの年と月が重要でもともとの日は不要。

  人数構成は合計人数のみが重要。もともとの大人、子供それぞれの人数も不要。

  • LightGBM,XGBoostの最適化とアンサンブル

  今回もOptunaを使用して最適化を実施、アンサンブルの予測も実施。

  個人のベスト予測はLightGBM + optuna + cv5でした。

  毎回アンサンブルがベストではなかったです。

 

■結果 125/680位(上位18%)

今回はデータに極端な偏りがなかったのでPublicとPrivateで大きな順位の変動はなかったです。

ちなみに最高位の人はモデルを6つ作りその予測のアンサンブルでした。