見出し画像

コンペデビューの所感〜atmaCup#10〜

どうも、スミスです。

すっかり春っぽくなりました。
屋上カフェのテラス席で気持ちいい風に吹かれながらこの記事を書いている今日この頃です。

さてさて、最近は引越ししたり繁忙だったりで投稿が滞っていましたが、2021年3月5日〜3月13日に行われていたatmaCup#10に参加しましたのでその感想と反省を記録しようかと思います。

どんなコンペだったの?

アムステルダム国立美術館の美術品の「いいね」数を予測するタスクでした。標準的なテーブルデータコンペのようでした。
データは美術品のタイトルや説明、作者などに始まり、その作品の様式、材料、誰がどんな作業に携わったかや作品の色彩に関する情報と多岐にわたっていました。

なんで参加したの?

atmaCupを認知した昨年夏ごろから「機会があれば...」と思ってました。
ただ開催期間が最短で1日とか、長くても1週間とか、そんな短期間で戦える自信がなかったんです。
今回は、【初心者歓迎】とあったこともあり、「初心者歓迎だったら1週間でもスコアくらい出せるかも...!(最近kaggleとかでちまちまsubしたりして、最低限のテクニックの知見はついてきたし)」と思い参加に至りました。

結果は?

Public114位(1.0074)、Private108位(1.0268)でした。
0.9台に乗せたかったけど到達できず終わってしまった...
今後の成長の糧としたいです。

初めてのコンペどうだった?

想像していたよりだいぶ楽しかったです(スコアが伸びない苦しさとか手数の少なさによる苦しさとか全部忘れた)。序盤に2回にわたり開いていただいた講座によってコンペの取り組み方を学べたり、実装例や戦略面をディスカッションとして提供していただいたり、今後コンペに参加するときにも活きる知見がたくさん得られたかなと思います。

今回のコンペでできたこと

・最近勉強している決定木ベースのモデリングの気持ちを(ちょっとだけ)考えられた
今回のコンペはLightGBMが猛威を振るっていました。私もこちらのディスカッションをベースラインとしてLightGBMでモデルを組みましたが、イテレーションごとの学習率を調整(小さめに設定)することでスコアを改善することができました。

・特徴量重要度に基づいて「効きそう」と感じた特徴量を作ることができた
作品の色情報を画像として再現して画像特徴量を取得するディスカッションがコンペ中盤に投稿されていました。実験的に投入して特徴重要度みたらそこそこ効いていたので、「データにある色情報の単純な統計量入れても効く んじゃね?」と思いRGBでの平均、分散、合計を取ってモデルに投入したらスコアの改善につながりました。色情報に関してテーブルの数値処理をすることに関してはディスカッションにもあがっていましたし特段工夫した、という感じではないかと思いますが、感覚とモデリングの結果を受けて効きそうな特徴量の仮説立てをし、実際にちゃんと効く特徴量を作成できたという意味でよかったと感じています。

今回のコンペで反省するところ

実は今回会社の先輩もコンペに参加されていて、終了後に反省会(といっても私が一方的にいろいろ質問しただけ...)もできましたし、たくさんの上位の方のソリューションなども参考になり、改善すべき部分がたくさん見えたことも収穫でした。この記事では、今回私を苦しませた要因に対する対策として特に必要性を痛感したことについて書きます。

1. 実験管理を怠けると特徴量やモデルの管理が破綻して後戻りが大変になったり、そもそもやる気が失せたりする

今回1番痛感したことです。そもそも、機械学習タスクにおける特徴量エンジニアリングは色んな特徴量を作ってモデルに学習させる情報を増やせば増やすほど精度が上がるため、特徴量作成が重要なタスクと言われることが多いかと思います。上位陣のソリューションを見ると、多い方で4000くらいの特徴量を投入していらっしゃいました。私はそこまで多くの特徴量は作れませんでした。アイデアの引き出しが少ないのもありますが、1番の原因は、特徴量作成もといデータセット作成までを1つのNotebookで行ってしまっていたがために、途中からNotebookが煩雑になりすぎて浮かんでいたアイデアを実装するやる気が失せてしまったのです。

(※コンペを終えて冷静になって調べてみたら、先人の知恵がたくさんあったのですね...😭 胸に刻みます、、、)
◉先人の知恵
データ分析コンペで役に立つ特徴量管理方法と学習・推論パイプライン
Kaggle日記という戦い方

上記にあげた先人の知恵を借りると、作った特徴量や前処理した外部データのファイル名などを一覧できるようにしておくことは必須かなと感じました。あとはEDAなどの可視化結果なども画像で出しとくとか、地味に大事かなと思いました。

2. ドメイン知識が大事。特徴量アイデアが重要になってくる場合は特に。

これは最近仕事してても感じていることです。結局データ分析は対象ドメインへの深い理解が最も重要ということ。当たり前かもしれませんが、その当たり前ができてないなと。結果に繋がりつつ、コンペを楽しむという意味でも対象のサービスを利用する、ウェブページなどを回遊する、関連施設とかに行ってみる等々にもっと時間を割けるようにしなければと思いました。そのためにも1のような実験管理などのモデリングの効率性を上げないとなあとも思いつつ。

終わりに

改めて初コンペ、楽しかったです。反省はいっぱいありましたが刺激的でした。運営の方々、ありがとうございました。入賞されたみなさま、おめでとうございます。
先輩からは、「ソロでLBトップクラスに上がれる実力をつけて欲しい」というお言葉をいただきました。108位、上位25%からのスタート。atmaはもちろんのこと、その他コンペにも出て今回の反省を実践していきたいです。

【おまけ】108th place solution(ソリューションと呼べるほどでもない)

1. 特徴量エンジニアリング

◉テキスト系特徴
Arai-sanの言語判定特徴:title, description, 
w2vによる埋め込み特徴:material, object_collection, technique, material&object_collection, material&technique, object_collection&technique, material&object_collection&technique, principal_maker(qualification&roles&production_places, maker_name, name)
tfidf:material, object_collection, technique, material&object_collection, material&technique, object_collection&technique, material&object_collection&technique
BERT&次元削減(pca, svd, tsne, umap):description
文字列長:title, sub_title, more_title, long_title, description
作品のサイズ:sub_title

◉色系特徴
画像特徴抽出後、次元削減(pca, svd, tsne, umap):palette
・統計量1(ratioの最大値、HSVとRGBそれぞれにratioを掛け、object_idごとに平均、分散、合計):palette
・統計量2(hexからHSVとRGBを取り出し、それぞれにpercentage(100で割った後)を掛けてobject_idごとに平均、分散、合計):color

◉その他
・作品の製作地を国名に変換した後にOheHotEncoding:production_place
・作品の登場人物の人数:historical_person
・使用素材数:material
・素材の複数使用判定:material
・作品の製作技法のOneHotWncoding:technique
・作品の形式のOneHotEncoding
・収集年の抽出:train(acquisition_date)
・作品の製作期間:train(dating_year_late-dating_year_early)

2. モデリング
LightGBMのシングルモデル
バリデーションはKFold CV(n=5)
パラメータはtakoiさんbaselineを参考に、learning_rateのみ0.001に設定

この記事が気に入ったらサポートをしてみませんか?