No Code, No Life

データサイエンティストを目指すしがないエンジニアのブログ

Day 49 Kaggleコンペ初submit

出場コンペ決めるまで

奮闘記録

Feedback Prize - English Language Learning

https://www.kaggle.com/competitions/feedback-prize-english-language-learning/overview

  1. コンペの概要を確認.

    • code competitionなので、csvだけでなくnoteを提出しないといけない.
    • note のコードが正しく動くことが前提. 正しく動かないと、errorとなり、submitしたことにもならない.
    • CPU, GPUで動作するコートで、動作の制限時間は9時間. テーブルデータで、およそ3000行ほどなので、9時間の壁はないようなもん.
  2. データの概要をおさえるため、「begin」でnote検索し、易しそうなEDA結果を確認.

    • FB1, 2で似たような問題があった模様で、そのときにtab, spaceを除く前処理をしたらスコアが上がったとの情報?
    • スコアが高いcodeでも、前処理を行っているcodeがない. 前処理にも鍵がありそう.
    • すくなくとも/n, /tくらいは除いたほうがいいか
  3. Vote数の多いCodeをざっと確認

  4. 現状のアイデア

  5. Debarta以外の複数のTransformersでも試してみて、アンサンブルにかけるか
  6. LightGBMの結果も思いきってDebartaと一緒にアンサンブルにかけるか.
  7. Debartaで出した最終的なスコアを、XGBでスタッキングする?
  8. 前処理関係のアイデアがほしいが、note読んでてもあまり効果的なものが見つからない. 生データみても、普通のテキストでしかないので、言語処理関係を再度見直すか.

  9. 必要なこと

  10. 自然言語処理の基礎学習
  11. スタッキングの練習 (基礎から)
  12. Discussion読んでみる
  13. Debarta-v3-baseのref読んでみる.

Day 48 SIGNATE、Kaggleコンペを始めました

データサイエンティスト分野で知らない人はいないであろう、データ分析コンペです.

ここ数日ブログ更新できていませんでしたが、寝る間も惜しんで分析進めた結果、SIGNATEでは金メダル2つ圏内取得 (クラスUP!).

Kaggleも念願の初submitに至りました.

Kaggleは本当に時間が取られますが、自分で手を動かして分析を進めると非常に勉強になります.

これまで精神論的な話しかできていませんでしたが、そこらへんの記録を残したいと思います.

2022/10/14の記録

  • SIGNATEのSOTAチャレンジに出場.

  • Kaggleよりかはとっつきやすいテーマだったため、1日で2個挑戦. なんと2つとも上位入賞.

①【第27回_Beginner限定コンペ】債務不履行リスクの低減 🥇

  • コンペ系初挑戦. とっつきやすいテーマ. SIGNATE begginer → intermediateへ昇格チャンスなので、これを逃さない.
  • 前処理を施し、とりまXGBoostぶちこみ. 決定木なので標準化とか欠損値処理は行わない. → 高いスコアでず....
  • 調べてみると、目的変数が不均衡. Under samplingで対応できそうかも.
  • 実際Under sampling、XGBoost(ハイパーパラメータチューニング済)で、うまくいった!祝!🥇金メダル🥇! 昇格しました.
  • 本当はアンサンブルとかスタッキングとか試してみたかった. まだしたことがないので...
  • まだ改善の余地はあるが、ランクを上げることを優先し、一旦これにてclose.

② SIGNATE Student Cup 2021秋:オペレーション最適化に向けたシェアサイクルの利用予測 🥇

  • 前職の経験を活かし、これは単純な移動平均モデルでいいのでは?と試行し、なんとうまくいく. SARIMAモデルとかも案外馬鹿にできない.
  • というか、このような「需要」予測って、影響するパラメタが多すぎて、かえって単純な移動平均モデルがうまくいくのかもしれん.
  • 案外、pandasでの処理に苦戦. まだまだpythonの腕が足りん.
  • 結果: 祝!金メダル🥇圏内!
  • URL: https://signate.jp/competitions/567/leaderboard

次やりたいSIGNATE SOTAチャレンジ

  • 「SIGNATE Student Cup 2021春:楽曲のジャンル推定チャレンジ!!」をやりたい. これも、テーブルデータからのclass分類なので、基本問題.
  • ざっとデータを眺めてみたが、外部データも必要なさそうなので、案外すぐにできそう.
  • これで金メダルとれば、SIGNATEのクラスはAdvancedくらいには上がるか.

現状のGit、キカガク進捗

Github

10/14 Github

キカガク

10/14 キカガク

Day 47 精神論は嫌いだが、

本日の学習プランと結果

内容 結果 備考
キカガク: 画像認識 fine tuning X
キカガク: 時系列解析 X
キカガク: 自然言語処理 X

追加で行ったこと

  • Web Scrapingの基礎/応用
  • Flask
  • リーダブルコード講習

Github

10/11 草

10/11 キカガク

記録

「やり始める」こと自体は気合でやるしかないという結論に至った.

精神論が嫌いだ.

「そんなものは気合でなんとかしろ」というのは、あまりに抽象的な指示であり、再現性もない.

ただ、どうしても気合 (正確に言えばメンタル面)で乗り越えるしかないな、と思うシーンがある.

なにかを始める」ときだ.

独学で勉強を進める以上、教師がいるわけでもなく、周りの目が厳しいわけでもない.

どうしても怠けてしまい、後回しにしてしまうのが人間だ.

("その人"が悪いのではなく、人間というのは本能的にそうらしい)

よく書籍等で見かける対策が「とにかく始めること」であるが、「始める」ことさえも億劫なときがある.

それを乗り越えるには、最後はやはり"気持ち"の面でしかないのだ.

  • 1行でいいから、コードを書こう.

  • 10秒でいいから、ドキュメントを読もう.

これらの「スターター」は、最後は結局「目標を達成したい」という強い気持ちでしか発動しえない.

システム化することも1つの手ではある. 筋トレだったら、ベッドの上にダンベルを置いておいて、寝る前にかならずやるようにする、とか.

ただ、それも結局は「ダンベルをベッドからおろせば」寝ることはできるわけだし、究極の手段ではない(思い出すための手段でしかない).

色々とシステム化も試したが、究極のところは「気持ち」の問題になるのだ.

そのためには、「是が非でも目標を達成したい」という強い気持ちが必要になるのだ.

どうやって気持ちを整えるのか?

固い言葉で言えば「自己マネジメント」と呼んでもいいだろう.

「自分はメンタルが強い!モチベーションをずっと維持できる!」と思っていても、モチベーションが下がってしまうタイミングはどうしてもあると思う.

(現に、自分はそうだった)

自分を過信せず、まずは「そのように、強い気持ちを持っていてもモチベが下がってしまうのも自分の一面である」と認め、そのような自分と、うまく付き合う方法を確立しよう.

勉強というのは、短距離走ではなく、マラソンのような、長い長い持久走なのだ.

自分との付き合い方

自分の取扱説明書といったところか. 面倒なやつだなあ.

下記はあくまで私の場合の例.

  • ちょっと疲れたとき: 15分寝る. ← なんだかんだ一番効果的. 目を休ませる.
  • 笑いたいとき/息抜きしたいとき: 芸人のYoutubeをみる
  • 気合を入れたいとき: 受験生版TFをみる (宮大工の回とか)
  • 感傷にひたりたいとき: 好きな曲を聞く、アニメを見る.
  • 家の中が飽きたとき: 散歩する

明日の計画

振り返りメニュー

向き合ったら○をつける。

課題克服メニュー クリア 理由
1. 優先順位を設定する -
2. 考えすぎずに手を動かす・気付いたことはすぐにメモする C 「まずははじめてみる」
3. 振り返る O このブログ
4. 継続する O このブログ
5. 気づき・考えたこと・思ったことをまとめる O このブログ
6. 嘘をつかない・見栄を張らない O
7. 収支の把握 O
8. 没頭する O

Day 46 GPU

本日の学習プランと結果

内容 結果 備考
キカガク: 画像認識 入門 C GPU利用制限にひっかかった.
SIGNATE 練習問題 1問

追加で行ったこと

Github

10/10 草

10/10 草

記録

GCPはうまく使わないとすぐにGPU制限に引っかかる

ついにGPU利用制限にかかってしまった.

朝から重いCNNをガンガン回してしまったためだろう...10GB近くするGPUを無料でガンガン回せる時点で、相当にすごいのだが、学習を進めていく際には少々やっかいだ.

ただ、実際にGPUを買うとなるとえらくコスパが悪い.

GCPでたまに使える「Tesla T4」は、市場価格40万近く.

GCP Proの月額が100コンピュートあたり1000円なので、そう考えるとよほどの専門職でない限り、GCP Proに入会するほうがよほどお得そうだ.

ちなみに、GCPで用意されていないライブラリを毎回pip installするのが大変に面倒くさい.

と思ったときに、下記のようなサイトを見つけた.

https://qiita.com/ezoalbus/items/d42d47685b592816054d

https://ggcs.io/2020/06/22/google-colab-pip-install/

なるほど、Google driveにパッケージ自体を保存しておくのか.

この方法であれば、notebookを開くたびにインストールする手間はなくなる. しかし、新しいnotebookで毎回連携→driveに保存しなければいけないのも、面倒だなあ...

GPU利用制限の間に何をするか?

GPU使わなくて済むことをしよう (当たり前).

数学だったり、WEB系の知識習得だったり.

明日の計画

内容 分量 結果
キカガク: 画像認識 fine tuning
キカガク: 時系列解析
キカガク: 自然言語処理

振り返りメニュー

向き合ったら○をつける。

課題克服メニュー クリア 理由
1. 優先順位を設定する -
2. 考えすぎずに手を動かす・気付いたことはすぐにメモする C もう少しスピード感がほしい
3. 振り返る O このブログ
4. 継続する O このブログ
5. 気づき・考えたこと・思ったことをまとめる O このブログ
6. 嘘をつかない・見栄を張らない O
7. 収支の把握 O
8. 没頭する O

Day 45 まずは確認/調査しながら写してみる

本日の学習プランと結果

内容 分量 結果
キカガク: OptunaによるNN構造探索 完了 O
キカガク: 画像認識 入門 C

追加で行ったこと

  • ベイズ最適化に関する初期調査.
  • SIGNATE 練習問題

Github

10/9 草
10/9 キカガク

記録

ベイズ最適化

Qiitaの記事はホンマかいな?と思うことも結構書いてある. こういうのは「ベイズ最適化 良書」とググッて、本を読んだほうがいい.

図書館で下記本を借りてくる.

  • ガウス過程と機械学習(機械学習プロフェッショナルシリーズ)
    • ベイズ最適化を語る上で最初の関門となる「ガウス過程回帰」. 一応簡単にでも理論を抑えておきたい.
  • 実験計画法 方法編 基盤的方法から応答曲面法,タグチメソッド,最適計画まで
    • ハイパーパラメータをどのように最適化していくか.
    • 初期調査をネットで進めると、直交法はもはや使われない?応答曲面に関する日本語の文献を見ておきたい.

Google ColabからGithubのprivate repositoryにcommitする方法

Qiitaに投稿予定.

Documentsの読み方/身につけ方

Documentはざっと読むだけでも面白い. 「この書き方は~~までに廃止予定」とか、結構criticalなことも書いてあるので、面倒くさがらずに適宜読むこと.

(そのためにも基本的な英語くらいは学んでおこう)

  • 読み方: Sampleよりも上に概要が書いてあるので、ざっと読む.
  • 身につけ方: Sampleコードを、わからないところはざっと調べながら写す.
    • コピペはもってのほか. 個人的には、多少時間かかってもコードをうつことが理解定着に繋がると考える.

明日の計画

内容 分量 結果
キカガク: 画像認識 入門
SIGNATE 練習問題 1問

振り返りメニュー

向き合ったら○をつける。

課題克服メニュー クリア 理由
1. 優先順位を設定する -
2. 考えすぎずに手を動かす・気付いたことはすぐにメモする C もう少しスピード感がほしい
3. 振り返る O このブログ
4. 継続する O このブログ
5. 気づき・考えたこと・思ったことをまとめる O このブログ
6. 嘘をつかない・見栄を張らない O
7. 収支の把握 O
8. 没頭する O

Day 44 NN構築できるようになった / Batch Normalizationについて

本日の学習プランと結果

内容 分量 結果
キカガク: 機械学習の基礎3 完了 O
キカガク: Streamlitの基礎 完了 O
キカガク: ディープラーニングの基礎1 完了 O
キカガク: ディープラーニングの基礎2 完了 O

Github

github
10/8 草

キカガク
10/8 キカガク

ひとこと

PyTorchを使用してニューラルネットワークをついに自分で構築できるようになった.

(そして、これまで理解できていなかったコードの意味についても、きちんと理解できるようになった)

次はOptunaによるNN構造そのものの探索にチャレンジする.

Kaggleにも挑戦していくが、DLが必ずしも最適とは限らない.

XGBoostのようなアンサンブル学習も改めておさえつつ、機械学習の基本からさらにステップアップしていきたい.

Batch Normalizationについて

キカガクで、ここの説明は非常に浅かったため、自分で色々と調査した.

  • ミニバッチ1の学習が終わり、ミニバッチ2の入力が始まったとき. ミニバッチ2とミニバッチ1のデータ分布があまりに違うと、全く違うパラメータで更新されてしまう. さらにミニバッチ3がミニバッチ2と全く違う分布だったら...学習が大変非効率になる. (内部共変量シフト)
  • この問題を解決するために、各ミニバッチごとに平均と標準偏差をもとめ、下記のようにx^へ各変数ごとに変換して、入力するデータ分布をある程度一定にしようとするのがbatch normalization.

BN

明日の計画

内容 分量 結果
キカガク: OptunaによるNN構造探索 完了
キカガク: 画像認識 入門

振り返りメニュー

向き合ったら○をつける。

課題克服メニュー クリア 理由
1. 優先順位を設定する -
2. 考えすぎずに手を動かす・気付いたことはすぐにメモする C ちょっと悩んだら、手を止める前に調べて実装する流れにしている.
3. 振り返る O このブログ
4. 継続する O このブログ
5. 気づき・考えたこと・思ったことをまとめる O このブログ
6. 嘘をつかない・見栄を張らない O
7. 収支の把握 O
8. 没頭する O

Day 43 最初は浅く広く.

本日の学習プランと結果

内容 分量 結果
キカガク: 機械学習の基礎1 完了 O

追加で、機械学習の基礎2も完了. 章末問題は特に問題なし.

前々から繰り返しやっていることなので、すでにある知識を復習/さらに深掘りしている.

現在基礎3.

Github

github
10/6 草

キカガク
10/6 キカガク

ひとこと

機械学習の領域は、一朝一夕ではとても身につけられないくらい、深淵な世界である.

どんな教科書/サイトでも最初の方に記載されている「重回帰分析」は、とっつきやすい内容ではあるが、

その内容を本当に理解するためには、線形代数の知識/応用が必要だし、

統計についても分かっておかなくてはいけない.

そう、どんなに「分かっている」つもりでも、全くまだまだスタートラインにすら立っていない状況である可能性さえもあるのだ.

学習をはじめて数ヶ月近くになる (最初は線形代数の復習からだった)が、

何度も何度も手を動かして、それでやっと分かってきたこともあれば、

まだ分からないこと、知らないこともたくさんある.

焦ってはいけない.

人生は (勉強の)旅である.

一生向き合いたいと思っているからこそ、今楽しく勉強を進められているし、そんなに焦りもない.

この人生を、この分野にかけたい. そして、これまで積んできた経験もかけ合わせて、Only Oneの存在になる.

ちなみに

Udemyを活用していたが、さすがはキカガク.

どのUdemyの動画よりも解説が体系的でわかりやすい.

11月から個人ミーティングも始まるが、非常に楽しみである. それまでに一通りはやっておきたい.

明日の計画

内容 分量 結果
キカガク: 機械学習の基礎3 完了
キカガク: Streamlitの基礎 完了

振り返りメニュー

向き合ったら○をつける。

課題克服メニュー クリア 理由
1. 優先順位を設定する -
2. 考えすぎずに手を動かす・気付いたことはすぐにメモする C ちょっと悩んだら、手を止める前に調べて実装する流れにしている.
3. 振り返る O このブログ
4. 継続する O このブログ
5. 気づき・考えたこと・思ったことをまとめる O このブログ
6. 嘘をつかない・見栄を張らない O
7. 収支の把握 O
8. 没頭する O 寝食を忘れることがある. というか、お腹が空いても眠くてもやりたい.