Kaggleメダル獲得への挑戦 Vol.1
はじめに
この記事は30歳未経験からエンジニアに転身したド文系の僕が、機械学習エンジニアになるためにKaggleに挑戦しながらスキルを身につけていく過程をリアルタイムで発信していく連載記事となります。
毎週末、その週に僕自身が学んだ内容を発信していきます。
学びながら発信していきますので、場合によっては間違った情報や、誤って理解してしまっているものもあるかもしれません。
その際はぜひ温かくご指摘をいただけるとうれしいです!
ド文系でも本気で取り組めば結果を出せるんだという姿を見せられるように、日々頑張っていきます!
なぜKaggleに挑戦しようと思ったか?
元々機械学習に興味はあったのですが、「できたらいいなー」と思うばかりで全然行動に移せていませんでした。
やりたいと言いつつ、どこか本気度がなかったんですよね。
でも僕は1人のエンジニアとして、「現場や会社の数字を変えられるのが本当に有能なエンジニアだ」と考えています。
そしてそれを他の人にも偉そうに語っているにも関わらず、「数字を使って分析や予測を行う機械学習のスキルを本気で身につけようとしていない今の自分の姿勢ってダメすぎないか?」と感じたんです。
その瞬間から「本気で機械学習のスキルを身につけよう!」と決心し、今週から活動を開始したんです。
ではなぜKaggleなのか?
僕は何かを学ぶ際には資格試験などを活用することが非常に多いんです。
その方が具体的な目標もできて学習も進めやすくなるし、学習のロードマップも立てやすいからです。
で、Kaggleは機械学習に関する世界的なプラットフォームでもあるし、何より様々な企業がそれぞれのビジネスにおいて実際に課題と感じている問題がコンペという形で提供されているので、Kaggleを活用して学習を進めれば、机上の空論ではなく、実際のビジネスの現場で使えるリアルなスキルが身につくと感じたからです。
この仮説があっているかどうかはわかりません。
でも今の自分はこう感じているので、それを信じてKaggleでの学習を開始しています。
学習のやり方は以下の予定です。
-
Kaggle Learnで基礎を学ぶ
わからない単語や内容が出てきたらどんどん調べる -
レクチャー用コンペで学ぶ
過去のNotebookやDiscussionも参考にとにかく手を動かす -
賞金出るような本格的なコンペに参加する
とにかく挑戦!できなくても挑戦!
こんな感じで進めていきます。
最初はわからないことだらけで全然進まないと思いますが、それすらも楽しんで学習に取り組んでいこうと思います。
では以下からは今週の学びのまとめです
2025年4月28日〜5月4日までの学び
注)Kaggleは英語で構成されているため、その用語に慣れるためにも、主要な用語は英語のまま学ぶこととしています。
なので以下の記事でもところどころ英語の用語のまま記載していますが、それは上記の意図があってやっているものなので、その点だけご理解ください。
Feature Value
・日本語では「特徴量」のこと
・機械学習モデルに入力する情報のこと
・機械学習モデルはこの特徴量を使って「答え」や「予測」を作り出す
例)迷惑メールかどうかを判断する場合のFeature Value
・メール本文に「無料」という単語が含まれるか?
・メール送信者が過去にスパム登録されているか?
・メールのタイトルが長いか?
・画像だけで本文がないか?
など
筋のいいFeature Valueが入力されると、モデルはいい予測ができるようになる
反対にFeature Valueがよくないと、いくらモデルで計算をしてもいい結果は得られない
→特徴量設計(Feature Engineering)は機械学習における「設計図作り」のような超重要工程
→基礎を学ぶ方法としてKaggle Learnの「Feature Engineering」講座がある
Target Value
・日本語で「目的変数」のこと
・Target Valueは「機械学習モデルが予測したい答え」を指す
→モデルはこのTarget Valueを正しく当てるために学習を行う
例1:家の価格予測
Feature Value:部屋数、広さ、駅からの距離など
Target Value:家の販売価格
例2:顧客の解約予測
Feature Value:利用年数、料金プラン、サポートへの問い合わせ回数など
Target Value:解約するか(Yes/No)
例3:画像分析
Feature Value:画像のピクセルデータ
Target Value:ねこ or 犬
機械学習の流れにおけるそれぞれの値の役割は以下の通り
1:Feature Value:モデルへの入力データ
2:Target Value:モデルが予測したい結果
3:Training(学習):入力と答えをセットにしてモデルに覚えさせ
4:Prediction(予測):新しい入力からTarget Valueを予測する
【補足】
回帰問題のTarget Valueは「連続値」(数値)
→家の価格やコンクリートの強度など
分類問題:Target Valueは「離散値」(クラスラベル)
→ねこか犬か、スパムメールか正常メールかなど
synthetic features
・日本語で「合成特徴量」のこと
・元のFeature Valueを組み合わせたり変換したりして新しく作り出したFeature Valueを指す(つまり自分で作成するFeature Value)
例えば、住宅データで以下のようなsynthetic featureを作成できる
・敷地面積、延べ床面積 → 「建蔽率(延べ床面積 ÷ 敷地面積)」
・建築年 → 「築年数(現在年 - 建築年)」
建蔽率という新しい指標を作ることで、「土地をどれだけ有効活用しているか」がわかる
築年数を作ることで、「建物の古さ」という情報を表現できる
こうして作った新しいFeature Valueを、synthetic featuresという
Synthetic Featuresの機械学習における役割
- モデルがパターンを見つけやすくなる
- 複雑な関係性(非線形関係)を補える:機械学習モデル(特に線形モデル)は非線形な関係を直接学習するのが苦手
- シンプルなモデル(Linear Regressionなど)でも精度を上げられる
特に「元データだけでは精度が頭打ちになるとき」に、synthetic featuresを作ると性能が大きく向上することがある
新しいSynthetic Featureも含め、Feature Valueを見つける際に意識すべきこと
-
既存のFeature Valueの意味をしっかりと理解すること(もしあれば既存データに関するドキュメントをしっかりと読み込む)
-
扱っている問題の領域についての知識を入れること
例えば住宅価格の予測をしているのであれば、不動産市場の仕組みや商流などについて調査をする
調査のスタートとしてWikipediaも使えるが、より詳しく知るためにその分野の専門書や記事を活用する -
Kaggleの面で言えば、過去のコンペで活用された手法やディスカッションなどを調査することは非常に有益
-
データを可視化することで、文字列だけでは見えなかったものが見えるようになるときがある
Feature Engineeringの過程では必ず適宜データの可視化をしていくこと
よく使用する数学的計算
Synthetic Featuresを作成する際に、log(対数)、power(2乗)、sqrt(平方根)、exp(指数)をよく用いる
この理由は単に「変換する」ことではなく、「機械学習モデルがデータの構造をよりよく理解できるようにするため」
これらの変換により、特徴量と目的変数の関係性を直線的に近づけたり、分布を整えたり、重要な関係性を強調したりすることが可能
Log
- 極端に大きい値を圧縮してスケールを整える
- 右に偏った分布を正規分布に近づける
- 掛け算の関係を足し算で扱える(→線形モデルが使いやすくなる)
具体例👇
Logにより扱いやすくなるもの
・線形モデルでの予測
・Outlier(外れ値)の影響を減らす
・データの分布正規化
Power
- 特徴量の影響力が非線形に強まる場合に対応
- 距離や面積などの物理量との関係を表現
- 対称性を持たせて関係を補足
具体例👇
Powerで扱いやすくなるもの
・曲線的(U字型、指数的)な関係性
・線形モデルでの表現力強化
・空間的な距離やエネルギーのモデル化
Sqrt
- 数値の差を緩やかにする(変化量を抑える)
- 右に偏った分布を穏やかにする
- 単位の変換(面積 → 距離など)
具体例👇
Sqrtで扱いやすくなるもの
・分布の穏やかな補正
・特徴量のスケーリング
・物理的意味の調整
Exp
- 変化を強調したい(特に小さな差)
- 指数関数的な増加をモデル化したい
- モデル出力を非負に制限したい(例:Poisson回帰)
具体例👇
Expで扱いやすくなるもの
・確率的スコアの計算
・スコアの正規化や非負化
・変化の敏感さを強調
各計算方法のまとめ
変換ごとの用途と効果👇
機械学習モデルとの相性👇
変換の選び方のヒント👇
理論的には上記の通りだが、これは実際にいろんな問題に挑戦して手を動かしながら学んでいくこととする
【参考情報】Logの話
そもそもLogとは?
logₐ(x)は、「a を何回かければ x になるか?」を表す
例えば:
・log₂(8) = 3(なぜなら 2×2×2 = 8)
・log₁₀(1000) = 3(なぜなら 10³ = 1000)
よりシンプルに捉えると、対数は「どのくらい成長すればこの大きさになるの?」を表現する計算方法と言える。
なので
・「log₂(8) = 3」 は、2を『3回』かけたら8になる(2×2×2)
・「log₁₀(100) = 2」は、10を『2回』かけたら100になる(10×10)
となる
pythonではnumpyのnp.log()で対数計算が可能
その時の底(log₂(8)の2の部分)は、e(オイラー定数≈ 2.71828)となっている
※eはネイピア数とも呼ばれる
なので、np.log(x) = logₑ(x) を意味し、「e を何回かけたら x になるか? = オイラー定数を何回かけたら x になるか?」を計算している
オイラー定数(e)とは何か?
めちゃくちゃざっくり捉えると、eは「最も自然な増え方(成長)」をする特別な数のこと。
eを底にした指数関数(e^x)は「今の量に比例して増える」という世界で、最も自然に振る舞う関数。
→ これが「指数関数的成長」。
たとえば、
・貯金の利子
・ウイルスの感染拡大
・バクテリアの増殖
・放射性物質の減衰
・ニューラルネットの勾配消失対策
これらすべてがeと関係の深い現象となる
ではなぜeを底にするLog(自然対数)が便利なのか?(なぜこの方法で計算するのか?)
→eを底にしたとき、「変化のスピード」がシンプルな形になるから
eをイメージで捉えると、eは
「今までこんな感じで成長してきた→このペースでいけば5年後はこうなるだろう」
的な予測を自然な形でする際に使用する数といえる。
・e^x は「増えれば増えるほど、さらに増えやすくなる」成長モデル
・この時、「この変化を逆にたどって 'どこまで成長してきたか' を知る」関数が logₑ(x)(自然対数)
→ だから、「成長の逆関数」として自然界や機械学習で使いやすい!
Logまとめ
-
eはどんな数?
最も自然な増え方をする特別な数(約2.718) -
logₑ(x)(自然対数)の意味とは?
「eの何乗でxになる?」=成長の逆をたどる関数 -
なぜ便利か?
微分(変化)しても形が崩れず、自然現象や最適化に使いやすい -
実際の用途
感染症モデル、金融利子、放射線減衰、機械学習の損失関数など
mutual information (MI)
-
日本語で「相互情報量」
-
ある変数を知ることで、もう一方の変数についてどれくらい不確かさ(不確実性 = エントロピー)が減るか?を表す指標
→「Aという情報を知ることで、Bがどれだけ予測しやすくなるか?」
AとBが全く無関係の場合 → mutual information = 0(知っても無駄)
AとBが完全に依存 → mutual informationが大きい(知れば全部わかる) -
より詳しくいうと「二つの変数間の依存関係の強さを測る尺度」のこと
-
mutual information はTarget valueとの関連度が高い特徴量を選択するのに使用する
→ 「この特徴量は予測に使えるのか?」を判断するための強力な武器になる -
MIは線形前提がないため、非線形な関係でもしっかりと関係を見抜ける
→ correlation coefficient(相関係数)と比較してより柔軟で強力な指標
MIの注意と限界点
-
単位がない:スコア自体の絶対値には意味がない(他と相対比較してTarget Valueとの関連度を測っていく)
-
解釈が難しい:ピアソン相関のように「プラス・マイナスの関係」はわからない
-
高次元(high-dimensional)に弱い:特徴量が非常に多い場合、推定が不安定になる
使い方参考情報
-
もし10個のFeature Valueがあれば、それぞれについてTarget ValueとのMIを計算できる
-
その結果に基づいて、関連度の低いFeature Valueを削除する、または重要なFeature Valueのみを選択する=Feature selection(特徴量選択)
-
さらに選択された重要なFeature Valueに対して、相互作用や変換を加えてsynthetic featureを生成することで、より複雑なパターンを捉えるモデルを構築しやすくなる
今週の学びは以上です。
次週も頑張って学びを積み上げていきます!
未経験からエンジニア転職を目指すあなたへ
僕は今「未経験から本気でエンジニア転職を目指す人」のための新しいサポートサービスを準備中です。
もしあなたが…
-
業務改善を通じて価値を出せるエンジニアを目指したい
-
数字や仕組みで現場を変える力を、キャリアに活かしたい
-
これから学ぶべきステップを明確にしたい
そんな想いを少しでも持っているなら、ぜひ僕の公式LINEに登録しておいてください。
サービスに関する先行案内や最新情報を優先的にお届けします。
👉公式LINEはこちら
Discussion