機械学習の面白さは、モデルよりも試行錯誤にあった
はじめに
今更ですが、タイトル通りの現象が起きています。
家の本棚から「スッキリわかるPythonによる機械学習入門」という書籍を掘り起こしてから、
新発売のゲームを遊ぶような感覚で、機械学習にハマりつつあります。
きっかけになったのは、この本です。
スッキリわかるPythonによる機械学習入門
読み進めながら手を動かし、Kaggleで実際に試していく中で、
機械学習に対する印象が少しずつ変わってきました。
Kaggleを触って最初に感じること
Kaggleというと高度なモデルや上位勢のテクニックに注目が集まりがちです。
ただ、実際に触ってみると面白さの中心はそこではないことに気づきます。
やっていること自体は、とてもシンプルです。
- データを train と validation に分ける
- 学習させる
- 前処理や特徴量を少し変えて、もう一度試す
基本はこの繰り返しです。
それでも、結果は毎回はっきり数字で返ってきます。
試したことと結果の距離が近い。
この感覚は、これまでの学習ではあまり味わえませんでした。
train と validation を分ける意味が体感できる
機械学習の入門書や記事では、train / validation の分割は当然の前提として説明されます。
ただ、読んで理解したつもりでも実際にどれほど重要なのかは、なかなか実感しにくい部分です。
Kaggleでは
- 精度が上がったと思ったら validation では下がる
- 前処理を変えたら一気に悪化する
- 「良さそう」に見えた改善が通用しない
といったことが普通に起きます。
こうした経験を通して
- その改善は本当に意味があるのか
- 偶然うまくいっていないか
- データの扱いに問題がないか
を、自然と考えるようになります。
機械学習は「当てる技術」ではなく「検証する技術」
Kaggleや入門書を行き来しながら感じたのは機械学習の本質はモデル選択そのものではない、という点です。
重要と感じたのは
- 仮説を立てる
- 試す
- 数字で確認する
- ダメなら戻す
という流れを、何度も回すことです。
この構造は
- システム設計
- パフォーマンス改善
- データ分析
- 業務改善
といった場面とも共通しています。
機械学習は特殊な分野というより、検証を前提にした思考を要求される分野なのだと感じました。
データの扱いが自然と丁寧になる
試行錯誤を続けていると
- この処理は train にだけ適用されているか
- validation に同じ前処理がされているか
- 意図しないデータの書き換えが起きていないか
といった点が気になってきます。
結果が数値として返ってくるため、データの扱いが少し雑になるだけでも影響が出ることが分かります。
その積み重ねで前処理やデータ操作そのものへの意識が変わっていきました。
Kaggleは「安全に試行錯誤できる環境」
実務では
- 正解が分からない
- 失敗の影響が大きい
- 十分に試す時間が取れない
といった制約がつきものです。
Kaggleでは
- 正解が用意されている
- 失敗しても影響がない
- 何度でもやり直せる
という環境が最初から整っています。
この点は、学習という観点では非常に大きなメリットだと感じました。
勝敗よりも、試行錯誤そのものが価値になる
Kaggleにはランキングがありますが、必ずしも上位を目指す必要はありません。
それよりも
- なぜこの結果になったのか
- どこを変えれば改善しそうか
- 次に何を試すべきか
を考える過程そのものに価値があります。
精度を競う場でありながら、実際には「考え続ける練習」をしている時間の方が長いと感じます。
おわりに
機械学習を学んでいて面白いと感じたのは、モデルが賢くなる瞬間そのものではありませんでした。
- 試す
- 確かめる
- 考える
- やり直す
この流れを、無理なく何度も回せること。
そこに、機械学習を学ぶ価値があると感じています。
Discussion