Kaggleについて

ottoコンペ 1 week challenge奮闘記録

https://www.kaggle.com/c/otto-group-product-classification-challenge/overview

目標は金圏です。(5年前のコンペなのでライブラリ自体進化しているので)

某GMに良コンペだと勧められたのでやってみます。

 

そして、コンペのコードは以下にまとめておきます。Kedroを使っています。案外良いです。(Kedroについての発表資料を作ってる途中)完全理解?したらいつか語ります。

https://github.com/Chizuchizu/otto

1日目

とりあえずデータを見てベースラインを作りました。

  • 特徴量はそのまま
  • hold out

xgboostで適当に作りましたが案外伸びました。700th/3500くらいです。

時間がなかったので進捗はここまでです。

2日目

ある特徴量をtargetごとに描画してみました。

何となく対数取ってみると見えてくる気がします。

対数は効くのかも知れませんね。

今回のコンペは匿名特徴量で何もわからないのでfeature engineeringとしては

  • PCA/t-SNE/UMAP
  • 集約統計量
  • 対数を取るだけ

などなど考えています。

 

とりあえずUMAPで可視化してみました。fitにかかる時間はだいたい2分位でした。

これだけだと良いのかわかりませんが、「log(1+x)をすると良い」と助言を頂いたのでやってみました。

クラスが上がるにつれて散らばりが大きくなっているように見えます。

明日はもう少しパターンを増やして規則を見つけてみたいと思っています。

Kedro viz

https://github.com/quantumblacklabs/kedro-viz

とりあえずGitHub見てみてほしいんですけど、Kedroで作成したコードを可視化してくれます。どんなふうにかというと、フローチャートのようにです。

今回のものだとこのようになります。まだ学習までは進んでいませんが、関数のファイルの受け渡しなどがちゃんと画像化されてわかりやすくなりますし、solutionとかにも使えそうです。

3~6日目

Kedroで作ったbaselineを提出しましたがスコアは0.55……前よりも低くなった原因を探さなければなりません。

  • Log(1+x)をPCAとUMAPにかけた
  • count 0を追加

すると、

  • スコアがガタ落ち
  • CV: 0.47
  • LB: 1.6

何が駄目だったのか

PCAとUMAPで何かやらかしました。

  • 最初からDFをLog(1+x)取って学習させてもLBは0.4台
  • PCAを追加することで1.6に落ちる

何がおかしいんでしょうか……

分布を見ましょう

バグが取れないとき、なにかおかしいときはtrainとtestの分布を見ると良いと教えてもらったので色々見てみます。

上のものは正常なモデルのpredのクラス別のヒストグラムです。

一方でこちらはスコアがガタ落ちしたモデルのヒストグラムです。

微妙な違いですが、分布が違います。例えばClass1を見ればわかりますが、trainは0.1から上がっていきますが、testでは下がっています。学習時のtrainのデータとtestのデータに差があるのかもしれません。

これはpcaのヒストグラムです。こちらはLogかけてないほうです。

こちらはLogをかけたほうです。分布はだいたい合ってるので大丈夫だと思いますが……

 

fitはtrainのみでtransformは全部ってやるほうが良いんでしょうか。試してみましょう。

スコアは変わりませんでした。

何で…何で……PCAが駄目なんだ……悲しいです。feature_importanceでは比較的上位だったので学習をより早められるかなと思っていましたが厳しいようです。未だに未解決ですが、これからも探します。(前に進みながらたまに振り返る)

shap

スコアが落ちる原因を探すためにKaggler-jaで質問したところupuraさんにshapで分析したほうが良いと言われたのでやってみました。

https://github.com/slundberg/shap

feature_importanceの上位互換のようなものらしいです。

特徴量の影響を綺麗に可視化してくれます。

へーっていう感じです。バランス良いのかなと思っていましたが、意外とそうじゃないですね。

現在のパイプライン

学習までのモデルを作ったのでこうなりました。可視化してみると綺麗ですね。

こういうの楽しいのでたくさん関数作りたいですw

7日目

学校が休校になり、atmacupに参加できずに自宅でぼーっとしながらデータ見て数学して寝てる生活を送っています。

今日も進捗を生みたい。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です