#はじめに
###自己紹介
チズチズと申します。今は14歳で中2です。
多趣味型ですが、特にタイピングをしていました。(過去形)
今は技量低めのイキリKagglerになってます。
“一応”IEEEで銅メダルを取りました。なぜ“一応”なのかは後ほどわかります。
AtCoderに飽きてからKaggleに入門しました。絶対に自分の力でMasterになってやる。
###書こうと思ったきっかけ
アドベントカレンダー書いてみたかったので。
何か記事を書こうとは思ったんですけど、今はスキルでは技術を紹介するレベルではないので今のKaggle低迷期の現状をリアルに伝えようと思います。
所詮Kaggleも競プロみたいなもんだろとか思ってましたが、完全に舐めてました。やることちゃんとやらないと生きてけない……
要約するとデータ分析できないKagglerが自分を分析するという記事です(自己啓発系サイエンティスト)
文字ばかりで読みづらいかもしれませんが読んでもらえると嬉しいです。あと、アドバイスはうるさいくらいでもいいのでください。お願いします。
教訓は下にまとめます。
###Kaggle低迷期の現状
これまでとこれからを書くよりもまず自分の現状を書いたほうが良いと思いました。
今はいろいろコンペに参加しているんですけど、低迷期なのでわからないことだらけです。
####言語の壁
I speak Japanese.I'm not good at English. I'm learning English. I should keep learning a lot:)
母国語は日本語なので英語は苦手です。(オンライン英会話をやって少し学ぼうとはしているけど)
Kaggleはすべて英語です。Discussionも。もちろん、日本語で書いても良いんですけど日本人同士の議論になってしまうのでGoogle翻訳を使ってでも英語を使うべきっぽいです。
もちろん、外国語なので難しいんですけどちゃんと読めばわかります。(特にnotebookはグラフやコード付きなので尚更)
言語を理由にしてできないはただの言い訳なのかなと思いました。
変に語らなければ中学英語でも大抵の質問の受け答えもできます。(GitHubのissueやDiscussionでも普通に)
Google翻訳使えば読めないわけではないですが、まだ少し抵抗があります。日常から英語に触れようと、スマホの設定はすべて英語にしています……(でもまだ全然慣れない)
####本質を理解していない
言語の壁に付随してくる問題だと思うんですけど、そもそもデータの特性がわからないので何を分析すればよいのかもわからずただひたすらEDAを読んでわからずに1日を終える日を繰り返してしまっています。「何がしたいのか」を理解せずにイキってEDAカーネルを読むのはお前には100万年早いんだよってことでしょうか。反省します。
今まで何回やるやる詐欺をしていたことだろうか。
わからない日々が繰り返されるとだんだん憂鬱になってくるのでやる気も失せてきます。マイナビコンペのときは日本語だったおかげか何をするのかが大体わかっていたのでやる気に満ちあふれていました。
やる気はあるんですけど五里霧中の中ビーチフラッグをしているようで諦めたくなる
Kaggle本を読んで少しでも前が見えるように模索していきたい……
###キラキラプログラミング初心者にはなれない
どちらかというと存在ダークネスただのコントリビューターになってます。
ビルド失敗して環境全部ぶち壊してOS初期化させたり、メモリのスワップ溢れさせて1TBのSSDを満杯にさせてしまって起動不可能にさせてしまったり……とダークネスな事件ばかり起きてます。
Kaggleのdiscussion見ていると面白い特徴を見つけている人が多々いて、すげぇなと感心してしまうんですけどそれまでに何時間データと見つめ合ってたのだろうか考えてしまいます。
本質が理解できればもうこっちのもんだと思っています。何をするべきかわかるのでどんどん仮説立てて実験して立証させてスコア上げて喜んで人生単調増加しそうです。
本質理解できればキラキラプログラマーになれるんでしょうか。
#####カッコつけプログラマーになろうとして墜落した話
- classを用いてコメントもドキュメントレベルに記載して
- 必要のないところまでのログの管理(そもそもログの管理すら怪しいが)
- Gitをちゃんと使ってピカピカコーディング
理想像を追い求めていった結果墜落しました。理由はシンプルで、本質じゃないところに時間を書けて本質(データサイエンス)を見失ってしまったことにあります。
Gitも使おうと思いましたが、気まぐれでコード書いているのでcommitするのを忘れてしまいます。
class使うと中の変数の確認が面倒なのでできるだけnotebookのように書こうと思います。
####IEEEコンペで何があったか
あのコンペは自分が初めてkaggleでメダルを取ったコンペでした。しかし、何もわからないまま終えてしまったのでそこまで誇れません……というのもほとんどデータを理解しておらずわからないまま進んでいたのでパラメータいじったりよくわからない特徴量作って遊んでたら偶然スコアが上がっただけです。一部は実力かもしれませんが、ほとんど何もしてないし何もわからなかったので メダル=やったぜ ではないなと実感しました。
以上の理由から“一応”メダル取ったぜ と記しました。
今度のコンペでは堂々たるメダルを取ってやりたい……
####まとめると
教科書が読めない子どもたち 状態になってます。(1年前くらいに本買いました)
読解力が無い人間はAIに変わっていくとか書いてありますが、AIを作っていく人間の読解力がなかったら本末転倒……
データの読解力というかコンペの読解力を上げていく必要があると考えました。
###反省と教訓
####目的を理解する
これが多分いちばん大事だと思いました。今まで“目的”がわからないまま何となくデータを見て何となくコーディングしていましたが、やっぱり何となくなので全然うまくいきません。しかも、議論がよくわかりません(目的がわからないので)
とりあえず、序盤は目的を理解することから始めて自分は何をすればよいのかを明確にしてからコンペを進めるべきだとわかりました。早とちりして怠惰に謎のEDAしたりよくわからない分析したりするくらいならoverviewをちゃんと読もうと思います。(starter kernelとか参考になるらしい)
####アウトプットする(?)
これは自分が初心者だからであって全員に当てはまるものではないと思いますが、自分は多分アウトプットしたほうがいい人間だと思います。
先程の目的を理解するところでもあったとおりに目的がわからないと進めませんが、もし万が一自分がトンチンカンな理解をしていたらどうでしょう。アンタ!何やってるの!違う!(極端ですが)とでも刺されない限りは平常運行できないでしょう。
場合によってはそのアウトプットが評価されることもあると思うので常識的な範囲内で可能な限りするべきなのかなぁと思いました。
過去には黒歴史混じりのJapanese Kernel(周りは英語で書いているのに自分だけ日本語でKernelを作成)もありましたが、書いて損はなかったなとは思っています。
####くじけない
これはマイナビコンペから得た教訓です。
実際マイナビコンペは最初ソロでちょちょっとやっていたんですけど全然精度が上がらず諦めていたんですけど、チームマージしてからチームのためにやるぞ!!!!って気持ちでいろいろ調べたり分析したりしたら新しい発見が見つかってきました。
####メモをする癖をつける
Jupyter NotebookでもSlack1人チャンネルでも自分が今日何をしたのか(実験とその結果)はすべてメモするべきだと感じました。3日経つと人間忘れてしまいますし、2ヶ月あるコンペで1日1日何をしたかなんて覚えてられません。自分が何をするべきなのかを理解するためにも無駄な実験回さないためにもメモを取るべきだと思いました。(長々と書く必要はないと思いますが)
マイナビコンペのときも、Slackの過去ログは参考になりました。個人参加ではあまり意識していませんでしたが、チームで取り組んだときに気付きました。
###おわりに
読んでくれてありがとうございました。
自分はこの記事を書いたことによって低迷期を脱出できそうな感じがしています。
これが全てじゃないと思いますし、所詮Kaggle Expert未満なので最適解とはかけ離れているかもしれません。
Kaggle Grand Master達は意識せずに呼吸するようにデータサイエンスできるんでしょうかね……(他人のことなのでわからないですけど)
しかしこの記事が誰かの役に立ってくれたら嬉しい限りです。
何かあれば何でもコメントください!
まだデータサイエンスのデの字も読めていない初心者ですが、少しずつスキルを磨き上げていこうと思います。低迷期ですが、まだまだKaggleは諦めてません。
“真”データサイエンティストになってまたQiita記事書けるようになりたいです。