いつか出たいとは思っていたんですよ
優勝されたチームの方おめでとうございます。
参加者の皆さん、お疲れ様でした。
ようやくそれが叶いました。
本当は少しデータを見るだけのつもりが、
徹夜でモデルをつくるとか、やっちゃいましたね……
あ、ブログのデザイン変えました。黒いほうが目にいいので。
結果は?
久しぶりのコンペだったので実質初心者です。
あまり力を入れすぎずにやっていこうと思っており、そこまで順位にこだわっていませんでした。
また、全力で取り組んでいる皆さんがいる中、ゆるふわで参加していたので、
せっかく美術品のコンペならドメイン知識提供しようと思ったポテトチップスや
精度指標がRMSLEだったので、全て0のsubmissionを出してtestのスコアの分布の代表値を考えるなど、
あんまり精度に貢献するわけでもないことをぼやいていました。
それでも皆さん読んでいただいて、いいねしていただいて、非常に嬉しい限りです。
美術館、なかなか行きづらいですが、実際換気も程よくされており、
今回のコンペで興味をもった方は是非行ってみるとよいかと思います。
とりわけ平日の常設展とかは空いているので、有給とっていきましょう。
地方の美術館にも言わずと知れた作品が展示されていたり、
思わず自分がlikeをしたくなる絵に出会える場合があります。
で、結果は?
LB: 84位(0.9951)
PB: 81位(1.0601)
幸いベストな結果がベストでした(小泉進次郎構文)
予想通りそこまで変動はしませんでした。kaggleほどのshakeが起きないことは予想できていたので、
無難なモデルの作成が奏功したなあとおもいました。ハァイ。
なんか「敢闘賞」なるものがあるらしく、それをいただきました。ありがとうございます。
敢闘させていただきました。
参考にしたディスカッション・サイト
atmaCup内のディスカッション
Webサイト
- note.nkmk.me
- 初手ここ。ここで分からなければドキュメント。
- pandas/numpyの処理で詰まったら大体ここ経由で公式ドキュメントに飛んだほうが早い
古事記にも書かれている
- lightGBM公式ドキュメント
- やっぱこれだね。
- 対数変換が効くのは分かりつつ、
tweedie
をobjective
にしてRMSLE
をcustom metric
で評価したモデルもあります。- 大体こういうのは効かないって相場が決まってるんすけどね。
dart
にしたやつを最終subに、と思ったら間に合いませんでした。weight
をつけられるらしいのでつけてみましたが精度が悪化したので辞めました。- というか
weight
を使って奏功する場面があまりない気がしている。
- というか
- ハイパーパラメータのチューニングはできませんでした。
- GPUがほしいね。
- その他各種ライブラリのドキュメント
- ドキュメントないと何も実行できないので。
ディスカッションはたかだか47くらいだったので、全て目を通して、時間との戦いで使えそうな実装に絞って実装しました。
(にゅーらるねっとわあくはよくわからないので、試すのを諦めました)
特にtakoiさんのベースラインは初心者にも易しい構成で平易なモデリングがなされており、スターターとして最適でした。
kaeruさんのBERTはベストディスカッション賞を取るだけあり、一瞬で利用できたのでやべーなーってなりました。
コード置いて、使い方書いて、そのように使えば使えるって本当すごいことですよ。かがくのちからってすげー!
戦略
戦略らしい戦略はほぼないですが、kaggleと違って期間が短いので、
何をやるかの優先順位をつけようと心がけました。
すでにkaeruさんのBERTが完成されているので、とりあえず変換しておきたい文字列特徴量を突っ込んで寝て
*1、
起きて仕事してる間にモデルを回す、みたいなことをやっていました。
特徴量は全て美術品object_id
ユニークにして、可能な組合せでマージして、
欠損を補完して、LGBに突っ込むループとかで放置していました。
でもverbose
つけてるとついつい見ちゃうので、なんか「終わったら音で知らせる」くらいのアレでいいなとか。
初めての試みに、結果などを管理するために、最低限必要な情報(突っ込んだ特徴量テーブルとかlocal CVとか、実行日とか)は
実行の都度アウトプットされるような形で生成していました。
実質的に自分用の実験管理記録を作ったのですが、事後的にハイパーパラメータを記録していないことに気づき、
「アーコレもうさいげんできないねえ」とか言っています。
ただ「何を使ったらどうだったか」は記録できたし、再現性のある実験記録づくりは自分なりに試して見ようと思います。
kedroやmlflowも検討しましたが、kedroは大分機能が変化していて、使うには知識のキャッチアップが伴いませんでした……
言語はPythonです。個人的に「仕事はR、コンペはPython」って決めているのでこうなりました。
仮想環境はpipenv
でバージョン管理し、VSCode内で完結する状態に持ち込めました。
特徴量については自称美術館めぐりが趣味なので、上手いことドメインを活かせるといいなあと思ってました。
上位陣は当たり前のようにやっていた色情報については、美術品別に集計値・代表値を出すくらいにとどめてました。
純粋な画像が得られている場合はそれこそ深層学習ですが、テーブルに出ているなら純粋にテーブルで統計量をひねり出すだけでも効きました。
美術品に対する情報における欠損の数(分かっていないことが多いことが魅力かどうかは)とか、意外と効きました。
あとはlong_title
の長さなどは、長すぎるとダメらしく、程よいやつがあるらしいです。
テキストをBERTにせず、単純に「文字列の長さ」で見るだけでもいいというのはなんだか、ふーんという感じでした。
ポテトチップスで書いた情報は全く役に立ちませんでした。所詮ポテトチップス。
コードは?
ごちゃごちゃしているので整理してgithubに上げてLAPrASの評価向上シェアします。
完走した感想
1週間のコンペはつらい。ソシャゲみたいに2週間ならいいのに。
……希望は書いておくべきですが、総じて面白かったです。
何よりコンペの設計がシンプルで、初心者の方にも手を付けやすいタスクだったと思います。
kaggleのtitanicはもう現行コンペの難易度と比べると「簡単すぎる」ので、
今回のatmaCupのタスクが実際標準的なのではないかと思います。
内容としてはkaggleでいうPETFinderに近い気持ちがあります。
テキスト、画像、テーブルデータの全てを使ったコンペでしたが、
今回はそれに近い性質のデータが揃っており、
「非構造データを如何に効く数字に変換するか」がキモだったなあと思います。
PETFinderはいろいろありましたが、コンペとしては面白いコンペで、
いろいろあって日本人チームが優勝しているので、今からでも見ると良いと思います。
しばらくコンペはいいかな……睡眠時間が削られるとメンタルに来るので今日は早く寝ます。
*1:結果が気になって眠れないのが常