機械学習の学習ノートで扱った判断軸を、自分でも試せる形式にまとめたクイズ集。問題文と選択肢が先に表示され、解答は折りたたみで隠してある。解答を見る をクリックすると正解と解説が現れる仕組み。
各問題は、Claudeに出題させた問題・解答と関連ノートへのリンクを添えて記事化したものとなる。
問題は順次追加していく。最新のセッションが下に積まれる。
Q1: 不均衡データでの評価指標選定
ある二値分類タスクで「ローン申込から不正取引を検出する」モデルを作っている。データは 10 万件あり、不正ラベルは全体の 2%(不均衡)。ビジネス側から「不正をできるだけ見逃したくないが、正常取引を不正と誤判定する数も抑えたい」と言われた。
このとき、モデルを評価する指標として「最も優先すべきもの」を 1 つ選び、選んだ理由(なぜ他の指標ではダメか)も短く述べてください。
選択肢:
- a) Accuracy(正解率)
- b) ROC-AUC
- c) PR-AUC
- d) MSE(平均二乗誤差)
解答を見る
正解: c) PR-AUC
不均衡データ(不正 2%)で「見逃しを減らし、誤判定も抑えたい」場面では PR-AUC が最優先となる。理由は ROC-AUC の構成要素である FPR の分母メカニズムにある。
- ROC-AUC は
FPR = FP/(FP+TN)の分母に陰性総数(FP+TN)を持つ。陰性が 98% を占めるデータでは TN が圧倒的に大きく、FP が多少増えても FPR がほとんど動かない。結果として ROC 曲線が左上に張り付き、AUC が楽観的に高く出る - PR-AUC は Precision (
TP/(TP+FP)) と Recall (TP/(TP+FN)) で構成され、両者とも陽性クラスに直接関係する量。Positive のレアさを素直に反映する - Accuracy は不均衡だと「全部陰性と予測すれば 98%」のように本質的でない高得点が出てしまう
- MSE は回帰用の指標で、二値分類の評価には使わない
判断軸: 陽性 5% 未満の強い不均衡では PR-AUC を主指標、ROC-AUC は補助で見る。
関連ノート: ROC-AUC / PR-AUC / 混同行列
Q2: モデル別の標準化の必要性
scikit-learn でいくつかの分類モデルを試したい。データには金額(円、〜数十万)と年齢(〜100)と取引回数(〜数千)など、スケールが大きく違う連続値の特徴量が混ざっている。
StandardScaler で特徴量を標準化(平均 0・分散 1 に揃える)する効果が「最も小さい」モデルはどれか。1 つ選び、「なぜ他のモデルは標準化の影響を強く受けるのか」も短く述べてください。
選択肢:
- a) kNN
- b) RandomForest
- c) LogisticRegression(L2 正則化あり)
- d) k-means
解答を見る
正解: b) RandomForest
標準化の影響度は、モデルが「特徴量の値そのものを使うか・順序だけを使うか」で決まる。
- RandomForest は決定木の集まりで、各分割は「特徴量 X が閾値 t 以下か」という順序ベース判定。値のスケールに依存しない(経験則ではなく構造から導かれる帰結)
- kNN / k-means は距離ベース。金額(〜数十万)と年齢(〜100)を混ぜると距離が金額に支配され、年齢が事実上無視される
- LogisticRegression(L2 正則化あり)は係数
wの大きさが||w||^2でペナルティを受けるため、スケールの大きい特徴量に有利な非対称が生じる。本来重要な特徴量の係数が不当に縮められる
判断軸として頭に入れたい整理:
| モデル種別 | 標準化の必要性 |
|---|---|
| 距離ベース(kNN, k-means, SVM RBF) | 必須 |
| 正則化付き線形モデル(LR/Ridge/Lasso) | 必須 |
| 木系(Decision Tree, RF, GBDT) | ほぼ不要 |
| 確率モデル(Naive Bayes) | 不要 |
関連ノート: 標準化 / RandomForest / kNN / LogisticRegression / k-means
Q3: モデル比較で次に取る行動
二値分類のモデルを作っていて、scikit-learn で次の 4 つのモデルを順番に試した結果、テストデータでの ROC-AUC が以下のようになった。
LogisticRegression (L2, C=1.0): 0.78
LogisticRegression (L2, C=0.001): 0.71
RandomForest (n_estimators=300): 0.85
RandomForest (n_estimators=300, max_depth=3): 0.79
このとき、「追加で試すべき行動として最も筋が良いもの」を 1 つ選び、なぜ他のものは優先度が下がるのか短く理由を述べてください。
選択肢:
- a) RandomForest をさらに大きく(
n_estimators=1000)して再評価する - b) LogisticRegression に多項式特徴量(
PolynomialFeatures(degree=2))を加えて再評価する - c) GradientBoosting(
HistGradientBoostingClassifierまたは LightGBM)を試す - d) 全モデルで 交差検証 のスコアを取って、テストスコアのブレを確認する
解答を見る
正解: d) 交差検証でスコアのブレを確認する
4 つのスコアはすべて「テスト分割 1 回分」の数字でしかない。手元のデータが 1000 件規模なら ±0.02〜0.05 のブレは普通に起こり、LR=0.78 と RF=0.85 の差 0.07 が「モデルの差」なのか「分割の運」なのかを CV を取らないと判別できない。
CV で各モデルの「平均 ± 標準偏差」を出して信頼区間が重なるか確認するのが先決。次の 2 パターンに分岐する。
- 信頼区間が重ならない → RF が本当に強い → a, b, c の検討に進む
- 信頼区間が大きく重なる → 差は誤差範囲 → 別の軸(速度・解釈性)で判断
各選択肢への評価:
- a) RF を 1000 本に: 収穫逓減が強く、誤差範囲に埋もれることが多い
- b) 多項式特徴量を LR に: LR が非線形を扱える手段だが、現時点で「非線形が必要」と疑う根拠が薄い
- c) GradientBoosting を試す: モデル候補を増やすのは悪くないが、土台のスコアが信頼できないまま新モデルを足してもまた 1 回分の数字で判断することになる
判断軸: 新しいモデルを試す前に、今あるモデルのスコア信頼区間を確認する。
関連ノート: 交差検証 / ROC-AUC / PR-AUC / ハイパーパラメータ / 標準偏差
Q4: データ分割の判断軸
機械学習プロジェクトを始めるとき、データセットを train(訓練)/valid(検証)/test(テスト)の 3 つに分けるのが教科書的だが、しばしば train と test の 2 分割だけで進めるケースもある。
「3 分割(train/valid/test)が必要な状況」と「2 分割(train/test)で十分な状況」を切り分ける判断軸として、最も適切なものはどれか。1 つ選び、理由も短く述べてください。
選択肢:
- a) データ件数が多いか少ないか(1 万件未満は 2 分割、それ以上は 3 分割)
- b) ハイパーパラメータ 調整や早期停止のように「テスト以外のデータでモデル選定の意思決定をする」工程があるか
- c) 交差検証 を使うかどうか(CV なら 2 分割、なしなら 3 分割)
- d) 教師あり学習か教師なし学習か
解答を見る
正解: b) モデル選定の意思決定をする工程があるか
判断軸の核心は「テストデータは最終評価専用であり、それ以外の判断には一切使ってはいけない」という原則にある。途中で意思決定(ハイパラ調整、early stopping、特徴量選択、モデルアーキテクチャの選定、精度以外の判断軸)をするとき、その判断をテストデータを見ながら行うと、テストスコアが「その判断によって楽観的に出た数字」になり、本番性能を高く見積もりすぎる(過学習 の一種)。
役割分担:
- 何度も触る判定用データ →
valid(検証) - 一度しか触らない最終評価用データ →
test
状況別の使い分け:
| 状況 | 分割 |
|---|---|
| ハイパラ固定で 1 回学習する | 2 分割で十分 |
| ハイパラ調整・early stopping・モデル選定をする | 3 分割が必要 |
| データが少なくて valid を確保しづらい | 2 分割 + train で 交差検証 で代用 |
各選択肢への評価:
- a) データ件数で判断: ハズレ。件数が少なくても 3 分割の必要性は残る(CV で代用するかは別の話)
- c) CV を使うかどうか: 惜しいが、CV は valid を擬似的に作る仕組みの 1 つに過ぎず、判断軸の主軸ではない
- d) 教師あり/教師なし: 無関係。教師なしでもハイパラ(k-means の
k、PCA のn_components)の選定で valid 相当が必要
Q5: 相関係数の解釈
ある回帰タスクで、特徴量 A と目的変数 y のピアソン相関係数 を計算したところ、+0.8 という値が得られた。このことから「言えるのは次のどれか」。1 つ選び、他の選択肢がなぜ言えないのかも短く述べてください。
選択肢:
- a)
Aの値が分かればyを高精度に予測できる - b)
Aはyの原因である - c)
Aとyには線形な関係が強くある - d)
Aとyには何らかの非線形な関係もある
解答を見る
正解: c) 線形な関係が強くある
ピアソン相関係数は「線形関係の強さ」を −1〜+1 で測る量で、+0.8 は強い線形関係を示す。他の選択肢は誤読の典型例で、相関係数を扱う際の落とし穴として頭に入れておきたい。
- a) 高精度予測の保証ではない:
R² = r² = 0.64程度で残り 36% は別要因。外れ値が支配的だと「数値上は高相関でも予測力は無い」現象も起きる - b) 因果ではない: 共通の第三因子が両方を動かしている「疑似相関」の可能性がある。アイスクリームの売上と溺死事故件数のように、気温(隠れ変数)が原因の例
- d) 非線形の有無は判定できない: ピアソンは線形性しか測らない。むしろ「相関係数が 0 でも強い非線形関係がある」(
y = x²や円形クラスタ)ことの方が落とし穴になる
判断軸:
- 相関 ≠ 予測精度(モデル全体と特徴量の組み合わせで決まる別物)
- 相関 ≠ 因果関係(因果推論には介入実験や DAG が必要)
- 相関 0 ≠ 関係が無い(線形以外を見るには相互情報量や Spearman 相関を併用)
Q6: ROC-AUC は近いのに PR-AUC が逆転するモデル選定
二値分類で「不正取引検知」のモデルを作っている。データは 99% が正常・1% が不正という強い不均衡。モデル A とモデル B を比較したところ、以下のスコアになった。
| 指標 | モデル A | モデル B |
|---|---|---|
| Accuracy | 99.0% | 96.0% |
| ROC-AUC | 0.92 | 0.91 |
| PR-AUC | 0.30 | 0.65 |
運用に乗せるならどちらを選ぶべきか、理由とともに答えてください。
解答を見る
正解: モデル B
判断材料は PR-AUC の差(0.30 vs 0.65)。Accuracy と ROC-AUC は A の方がわずかに上に見えるが、いずれも不均衡データでは過大評価されやすい指標で、当てにならない。
- Accuracy: 「常に陰性と予測」だけで 99% 出る。1% の陽性を当てに行く力をまったく測れない
- ROC-AUC: 構成要素の
FPR = FP/(FP+TN)の分母(FP+TN)が陰性 99% のため巨大。FP がそこそこ増えても FPR がほぼ動かず、ROC 曲線が左上に張り付いて AUC が楽観的に高く出る。A と B の差 0.01 はほぼ誤差 - PR-AUC:
Precision = TP/(TP+FP)とRecall = TP/(TP+FN)で構成され、両方とも陽性クラスに直接関係する量。陽性のレアさを素直に反映するので、不均衡時のモデル比較に効く
運用観点でも PR-AUC が筋。不正検知ではアラート1件あたりの確からしさ(Precision)が捜査コストに直結し、見逃し(Recall)は損失額に直結する。A の PR-AUC 0.30 はアラートの 7 割が誤検知になりかねず、現場が回らない。
判断軸: 陽性 5% 未満の強い不均衡では、Accuracy と ROC-AUC が拮抗していても PR-AUC で大きく差がつくことがある。指標を 1 つに絞らず、PR-AUC を主軸に Accuracy/ROC-AUC は補助で見る。
関連ノート: ROC-AUC / PR-AUC / 混同行列
Q7: ロジスティック回帰の係数の読み方
あるローン延滞予測の二値分類タスクで、特徴量を標準化したうえで ロジスティック回帰 を学習させたところ、各特徴量の係数が次のようになった(目的変数: 延滞する=1 / しない=0)。
| 特徴量 | 係数 |
|---|---|
| 年齢 | +0.5 |
| 年収 | -1.2 |
| 月の支出 | +0.3 |
| 過去の延滞回数 | +2.1 |
このモデルの結果から読み取れることとして最も適切なものを 1 つ選び、他の選択肢がなぜ言えない/言い過ぎなのか短く理由を述べてください。
選択肢:
- a) 過去の延滞回数が 1 増えると、延滞確率が約 2.1 倍になる
- b) 年収が高いほど延滞しにくい傾向が見え、影響度は係数の絶対値で見て「過去の延滞回数」に次ぐ大きさ
- c) 年齢が延滞の主因である
- d) 月の支出は延滞と無関係である
解答を見る
正解: b) 年収が高いほど延滞しにくく、影響度は「過去の延滞回数」に次ぐ大きさ
ロジスティック回帰の係数は「特徴量が 1 単位増えたときの log-odds の変化量」を表す量で、確率そのものや確率の倍率ではない。さらに特徴量を 標準化 してあるおかげで、各係数の絶対値を「影響の強さ」として横並びで比較できる。この 2 つを押さえれば自然と b に絞れる。
選択肢ごとの読み解き:
- a) ハズレ: 係数 2.1 は log-odds への効果。オッズ比に直すと exp(2.1) ≈ 8.2 倍で、「過去の延滞回数が 1 増えると、延滞オッズが約 8.2 倍」が正しい言い方。確率は上限 1 で頭打ちになるので「2.1 倍」とは書けない
- b) 正解: 年収の係数 −1.2 は「年収が高いほど延滞しにくい」を示す。標準化済みなので係数絶対値で順序付け可能で
延滞回数 2.1 > 年収 1.2 > 年齢 0.5 > 支出 0.3→ 年収は延滞回数の次に強い - c) ハズレ: 主因は係数絶対値が最大の「過去の延滞回数」(2.1)。年齢の 0.5 を主因と呼ぶのは過大評価
- d) ハズレ: 月の支出の係数 0.3 は小さいだけで 0 ではない。「小さい」と「無関係」は別物で、係数が小さくても効果はある(後段の特徴量選択で削るかは別の意思決定)
判断軸:
- 標準化済み → 係数絶対値で影響度を横並び比較してよい
- 係数は log-odds への効果。確率倍率にしたければ exp(係数) でオッズ比に変換、そのうえで「確率」とは呼ばない(オッズと確率は別物)
- 係数の小ささを「無関係」と即断しない。有意性と影響度は区別する
関連ノート: LogisticRegression / 標準化 / 正則化
Q8: データリークを疑う特徴量を見抜く
EC サイトで「その注文が後でキャンセル/返品されるか」を、注文確定の瞬間に予測するモデルを作りたい。Claude に特徴量設計を任せたところ、以下のリストが返ってきた。
データリーク(target leakage) の危険が最も高いものを 1 つ選び、他の選択肢がなぜリークと言いづらいかも短く述べてください。
選択肢:
- a) 注文金額(円)
- b) ユーザーの過去 30 日の注文回数
- c) 注文確定後 72 時間以内のカスタマーサポート問い合わせ回数
- d) 商品カテゴリ(家電 / 食品 / 書籍 など)
解答を見る
正解: c) 注文確定後 72 時間以内のカスタマーサポート問い合わせ回数
判断のポイントは「予測したい時点(注文確定の瞬間 t)に、その特徴量は本当に観測可能か」を機械的に問うこと。c は t より未来の事象で、推論時には存在しない情報を学習に混ぜている。これに加えて「問い合わせ」自体がキャンセル・返品の前兆シグナルなので、目的変数と強く相関し、学習データ上では超高精度が出てしまう典型的な target leakage になる。
選択肢ごとの読み解き:
- a) 注文金額: 注文確定の瞬間に既知。リークなし
- b) 過去 30 日の注文回数: 「過去」の集計値なので確定時刻には既知。リークなし
- c) 正解: 確定後 72 時間 = 未来の情報。リーク
- d) 商品カテゴリ: 確定時に既知。リークなし
判断軸:
- すべての特徴量について as-of timestamp(その値が確定する時点)を明示し、
as_of <= tを満たすものだけ使う - 「テスト精度が高すぎる」のは喜ぶより疑う。Accuracy 0.99 以上や ROC-AUC ほぼ 1.0 はリーク疑いの第 1 兆候
- 時系列が絡まなくても、結果の決定過程で生まれる量(最終承認担当者の経験年数、解約申請キャンセル回数など)は同様にリークになる
関連ノート: データリーク(data leakage) / 交差検証
Q9: 特徴量 5000 本のときの正則化の選択
二値分類タスクで、特徴量が 5000 本ある(うち実際に予測に効くのは数十本だけと予想される)。解釈性も重視して「どの特徴量が予測に効いているか」を一覧したい。Claude に LogisticRegression を渡すとき、正則化 として第一候補となるのはどれか。1 つ選び、他が第一候補にならない理由も短く述べてください。
選択肢:
- a) L1 正則化(
penalty='l1') - b) L2 正則化(
penalty='l2') - c) ElasticNet(
penalty='elasticnet',l1_ratio=0.5) - d) 正則化なし(
penalty=None)
解答を見る
正解: a) L1 正則化(Lasso)
判断のポイントは「学習後の係数の形」にある。L1 と L2 はどちらも係数を抑える点は同じだが、|w| ペナルティと w^2 ペナルティでは抑え方の挙動が違う。L1 は不要な係数を完全に 0 にする(sparse)、L2 は全係数を均等に 0 へ縮めるがゼロにはしない(shrinkage)。「効いてる数十本だけ残したい・一覧したい」という要件は L1 の sparse 性が直接刺さる。
選択肢ごとの読み解き:
- a) 正解: L1 は
model.coef_ != 0を数えるだけで効いてる特徴量を一覧できる。解釈性最重視の第一候補 - b) ハズレ: L2 は 5000 本全部に小さい係数が残る。係数絶対値で「強い・弱い」の濃淡は付くが、「効いてる本数を絞る」効果が無いので一覧化しづらい
- c) ハズレ: ElasticNet は L1 + L2 の混合。L1 ほど sparse にならず、L2 ほど安定でもない。「L1 で困ったときの折衷案」で、第一候補としては L1 で試してから乗り換える順序
- d) ハズレ: 5000 features に対してデータが少なければ確実に過学習する。解釈以前の問題
用語整理:
- 正則化(regularization): 係数の大きさにペナルティを足して、複雑なモデルになりすぎるのを抑える手法
- sparse(スパース): 係数の多くが 0 で少数だけ非ゼロという状態。特徴量選択の効果がある
- shrinkage(シュリンケージ): 係数を 0 へ向けて縮める操作。L2 はこれを全係数に均等にかける
- L1 / L2 / ElasticNet: ペナルティの形の種類。
L1 = |w|の和、L2 = w^2の和、ElasticNet = L1×r + L2×(1-r)
判断軸:
- 「効いている特徴量を選別したい・解釈性重視」 → L1
- 「全特徴量で安定して回帰したい・予測精度重視」 → L2
- 「迷ったとき、相関の強い特徴群があるとき」 → ElasticNet
関連ノート: 正則化(regularization) / LogisticRegression / 標準化
Q10: 混同行列から閾値を動かす判断
二値分類で不正取引検知モデルを作り、predict_proba の出力を閾値 0.5 で切ったところ、テストデータの 混同行列 が次のようになった。
Predicted 0 Predicted 1
Actual 0 (正常) 9500 400
Actual 1 (不正) 60 40
ビジネス要件は「不正の見逃しを減らしたい。誤検知のコストは見逃しより低い(誤検知してもアラート要員が手動で確認する仕組みがある)」。次のアクションとして最も筋の良いものを 1 つ選び、他がダメな理由も短く述べてください。
選択肢:
- a) 閾値を 0.3 に下げる
- b) 閾値を 0.7 に上げる
- c) 閾値はそのまま、別のアルゴリズム(RandomForest など)に切り替える
- d) 閾値はそのまま、Accuracy が 95% で十分高いので運用に乗せる
解答を見る
正解: a) 閾値を 0.3 に下げる
判断のポイントは「Recall を上げたいなら閾値を下げる」という方向性。混同行列から各指標を計算すると、現状は次のようになっている。
- Recall (見逃しの少なさ) =
TP/(TP+FN)=40/100= 0.40 → 不正の 6 割を見逃している - Precision (誤検知の少なさ) =
TP/(TP+FP)=40/440≈ 0.091 - Accuracy =
(TP+TN)/total=9540/10000= 0.954
predict_proba は「これは陽性である確率」を 0〜1 で出し、閾値はその「線引き」の値である。閾値を下げると陽性判定が増えて Recall が上がり Precision が下がる。閾値を上げるとその逆になる。ビジネス要件が「見逃しを減らしたい・誤検知許容」なので、閾値を下げて Recall を取りに行くのが正解。
選択肢ごとの読み解き:
- a) 正解: 閾値↓ → 陽性判定が増える → Recall↑、要件に合致。誤検知 (FP) が増えるが「許容できる」と書いてある
- b) ハズレ: 逆効果。閾値↑で Recall がさらに下がり、見逃しが増える
- c) ハズレ: 別モデルに切り替える前に、
predict_probaを持つモデル(LR / RF / GB ほぼ全部)なら閾値チューニングで要件を満たせる可能性が大きい。早計 - d) ハズレ: Accuracy 95% は陽性 1% のデータでは「全部 0 と予測」だけで 99% 出る指標。Recall 40% で運用に乗せるのは要件違反
判断軸:
- 混同行列を見たら必ず Recall / Precision を計算する(Accuracy だけで判断しない)
- ビジネス要件(見逃しコスト vs 誤検知コスト)から Recall 重視か Precision 重視かを決める
- 閾値は「Precision と Recall のどちらに振りたいか」のつまみ。0.5 は単なるデフォルト値で、最適値ではない
- 確率出力を持つモデルなら、別モデルに切り替える前に閾値で要件を満たせるか試す
関連ノート: 混同行列・偽陽性/偽陰性・閾値調整 / ROC-AUC / PR-AUC
Q11: 本番モデルの精度劣化の原因切り分け
あるレコメンドモデルを本番運用 3 ヶ月で、precision が当初 0.85 → 0.65 に低下した。コードもモデルも変更していない。本番ログを調査したところ、以下が判明している。
- 入力データ(ユーザー属性・行動履歴)の統計量(平均・分散)は当初とほぼ同じ
- ユーザーの推薦商品クリック傾向は変化: 以前は「同ジャンル過去購入」が強いシグナルだったが、最近は「価格帯」が効くようになっている
この現象を表す用語として最も適切なものを 1 つ選び、対処の方向性も短く述べてください。
選択肢:
- a) covariate shift(共変量シフト, 入力分布の変化)
- b) concept drift(概念ドリフト, 入力→出力の関係の変化)
- c) overfitting(過学習)
- d) data leakage(データリーク)
解答を見る
正解: b) concept drift(概念ドリフト)
判別の鍵は「入力分布 P(x) が変わったか、入力→出力の関係 P(y|x) が変わったか」を切り分けること。本問では入力統計量に変化がない一方で、クリック傾向が「同ジャンル過去購入」から「価格帯」に変わったとあり、これは同じ特徴量入力に対する正解ラベル分布の変化、すなわち P(y|x) の変化に相当する。よって concept drift が正解。
選択肢ごとの読み解き:
- a) ハズレ: covariate shift は「入力データそのものの分布」が変わるケース(例: ユーザー年齢の中央値が 30→45 にシフト)。本問では統計量が同じなので違う
- b) 正解: 入力分布は変わらず、ユーザー側の嗜好や行動原理が変わると、同じ入力でも正解ラベル分布が変わる。これが concept drift
- c) ハズレ: overfitting は学習時の現象(モデルが訓練データを覚えすぎる)。本番運用後に起きる劣化現象の名前ではない
- d) ハズレ: data leakage は学習時の混入で、運用後に発生する現象ではない
対処の方向性:
- 再学習: 最新データで学習し直す(最も基本)
- 新陳代謝の仕組み: sliding window で「直近 N ヶ月」だけ学習に使う、または時間減衰重みを付ける
- モニタリング: 本番予測精度を継続監視。ground truth が遅れて入手できる場合は遅延評価ダッシュボードを用意
- 頻度: 定期再学習(週次・月次)をパイプライン化、しきい値割れで自動再学習トリガーする運用も
用語整理(4 種類の drift):
- covariate shift:
P(x)変化、P(y|x)不変(入力分布だけ変わる) - concept drift:
P(y|x)変化(関係性そのものが変わる、本問のケース) - label shift / prior shift:
P(y)変化(ラベル比率が変わる、例: 不正取引の発生率上昇) - domain shift: 上記が複合的に起きる広義の概念
関連ノート: データドリフト(data drift / concept drift) / データリーク / 過学習
Q12: k-means の k 選定の筋の良い手順
顧客セグメンテーションのために k-means を使うことになった。Claude に分析させたところ、n_clusters を 2〜10 まで動かして各 k のイナーシャ(クラスタ内分散の合計)をプロットしたエルボー図が次のような結果になった。
k=2: 1450
k=3: 920 ← 大きく下がる
k=4: 710
k=5: 580
k=6: 490 ← 緩やかになる
k=7: 430
k=8: 390
k=9: 360
k=10: 340
運用に持ち込む k として最も筋の良い選び方を 1 つ選び、他がなぜ最適でないか短く理由を述べてください。
選択肢:
- a) k=3 を選ぶ(イナーシャが最も大きく下がる点 = エルボー)
- b) k=10 を選ぶ(イナーシャが最も小さく、最もよく当てはまっているから)
- c) k=3 を初期候補にしつつ、ビジネス側に「何セグメントに分けたいか」を確認し、解釈性も考慮して最終決定する
- d) シルエット係数や Davies-Bouldin 指標を別途計算し、複数指標で総合判断したうえで、最終的にビジネス文脈と擦り合わせる
解答を見る
正解: d) 複数指標で総合判断 + ビジネス文脈の擦り合わせ
エルボー法(イナーシャの曲がり角を選ぶ)は古典的な定石だが単独だと脆く、技術側の検証を複数指標でクロスチェックしたうえでビジネス文脈と擦り合わせるのが筋の良い手順となる。
選択肢ごとの読み解き:
- a) 部分点: エルボー法は出発点としては正しいが、目視判定が曖昧なケースが多く、単独だと「たまたまそう見える」を排除できない。silhouette / Davies-Bouldin で裏取りした方が安全
- b) 最悪: イナーシャは
kを増やすほど単調に減る量(極端にはk = nでイナーシャ = 0)。「イナーシャ最小だから良いクラスタ」は「訓練精度 100% だから良いモデル」と同型の誤り - c) 部分点: ビジネス文脈と擦り合わせる意識は正しいが、技術側を 1 指標だけで決めている。エルボー以外の指標で k=3 が妥当かを確認していない
- d) 正解: 技術側で複数指標を取って k=3 の妥当性を補強したうえで、ビジネス文脈(解釈性・運用上のセグメント数の制約・施策の打ちやすさ)で最終決定する
3 つの代表的な k 選定指標:
| 指標 | 意味 | 良い値 |
|---|---|---|
| イナーシャ (inertia) | クラスタ内分散の合計 | k と単調減少。曲がり角 (elbow) を見る |
| シルエット係数 (silhouette) | 「同じクラスタの他点との近さ」と「隣のクラスタとの遠さ」の比。-1〜+1 | 「高い」ほど良い(0.5 以上で良好、0.2 以下は怪しい) |
| Davies-Bouldin index | クラスタ内分散とクラスタ間距離の比 | 「低い」ほど良い |
複数指標で「同じ k 付近に山/谷がある」ことを確認できると、その k を技術的に強く推せる。
判断軸:
- 単調減少する指標を最小化しない(イナーシャ・loss・訓練誤差など、複雑さで一方向に動く量を単独で判断材料にしない)
- 単一指標で決めない。クラスタリングは正解ラベルが無いため、複数の評価軸でクロスチェックする
- 技術と業務の両輪で決める。技術的に最適でも業務で運用できなければ採用しない
Q13: 高次元データで kNN だけ崩れる原因
特徴量が 5000 本ある二値分類タスクで、Claude に次の 3 モデルを試させたところ、テスト精度が次のようになった。
LogisticRegression (L2): test acc = 0.80
kNN (k=5, ユークリッド距離): test acc = 0.55 ← 極端に弱い
RandomForest: test acc = 0.78
kNN だけが極端に弱い理由として最も筋が良いもの、および対処の方向性として最も適切なものを 1 つ選んでください。
選択肢:
- a) kNN は不均衡データに弱いため → SMOTE で陽性をオーバーサンプリングする
- b) kNN は特徴量が多すぎると距離が意味を失う現象が起きるため → PCA や特徴量選択で次元を減らす
- c)
k=5が小さすぎて過学習しているため →k=100にする - d) ユークリッド距離が悪いため → コサイン距離に切り替える
解答を見る
正解: b) 次元の呪い で距離が意味を失うため → 次元削減や特徴量選択で対処
特徴量数が大きくなると、ある点から見た「最近傍点までの距離」と「最遠点までの距離」の比が 1 に近づき、距離が「近さ」を意味しなくなる現象が起きる。5000 次元では min/max ≈ 0.93 まで近づき、kNN の「k 個の最近傍を取って多数決」が実質的にランダム選びと変わらなくなる。
3 モデルの差は依存している計算の違いで説明できる:
- LR: 各特徴量の係数を直接学習し、距離概念を使わない。ノイズ特徴量は係数が 0 付近に縮むだけ
- RF: 各分割は「特徴量が閾値以下か」の 1 次元判定。距離概念を使わない
- kNN: 全特徴量を使った距離計算が核。距離崩壊の直接被害を受ける
選択肢ごとの読み解き:
- a) ハズレ: 不均衡データは別問題で、5000 features の話と無関係。LR と RF は同じ不均衡データで動いているのが矛盾する
- b) 正解
- c) ハズレ:
kを大きくしても距離そのものが意味を失う問題は解決しない - d) 半分正解: コサイン距離はスパースな高次元ベクトルで有効だが、5000 次元の密ベクトルなら次元削減を先にするほうが筋
判断軸:
- 距離ベース手法(kNN, k-means の素朴版, RBF SVM)は次元が増えると弱くなる
- 木系・線形モデルは次元の呪いの直接被害を受けない(過学習リスクは別途)
- 5000 features がある時点で、kNN を試す前に PCA か L1 を挟むのが定石
Q14: カテゴリ変数のエンコーディング選定
Claude にテーブルデータの前処理を任せたところ、以下の特徴量に対する エンコーディング 案が返ってきた。4 つのうち最も筋の悪いものを 1 つ選び、なぜダメか短く理由を述べてください。
選択肢:
- a) 商品カテゴリ(10 種類、順序なし)→ One-hot encoding(10 列に展開)
- b) 都道府県(47 種類)→ Target encoding(各都道府県を「過去の平均購入金額」に置き換え)
- c) ユーザー ID(100 万種類、過去の購入履歴を識別する目的)→ One-hot encoding(100 万列に展開)
- d) 評価(順序あり: low / medium / high)→ Ordinal encoding(low=0, medium=1, high=2)
解答を見る
正解: c) ユーザー ID(100 万種類)→ One-hot encoding
最悪度のスケールが他と違い、c は「そもそも実行不能」になる。b の Target encoding も注意は必要だがやり方を整えれば成立する技術で、c は設計そのものが破綻している。
c が最悪な理由:
- メモリ爆発: 100 万カテゴリ × N サンプルの sparse 行列。仮にデータが 100 万行なら 1 兆要素規模で、
scipy.sparseで保存できても後段モデルに渡せない - 次元の呪い 直撃: 100 万次元では距離も線形分離も意味を失う
- 過学習必至: 各ユーザーが「自分の列だけ 1」になり、ユーザーごとの定数を学んでいるだけで汎化能力ゼロ
- OOV 問題: 推論時に新規ユーザーが来るとどの列にも入らず、予測不能になる
- そもそも ID は識別子であってカテゴリではない。「過去の購入履歴を識別したい」目的ならユーザー単位の集約特徴量(平均購入額、購入頻度、最終購入日からの経過日数など)に作り替えるのが正しい設計
選択肢ごとの読み解き:
- a) 正しい: 10 種類順序なし → One-hot は教科書的に正解
- b) 部分点的に危険: 全データで集約して リーク するリスクがあるが、
Pipeline内のTargetEncoderで CV fold に閉じれば成立する技術 - c) 正解(最悪): 設計そのものが破綻
- d) 正しい: 順序あり → Ordinal encoding は適切
判断軸(基数 = 種類数で選ぶ):
| 基数 | 第一候補 | 注意 |
|---|---|---|
| 〜20 | One-hot | 順序があれば Ordinal |
| 20〜10,000 | One-hot / Target encoding | Target は CV 内で集約 |
| 10,000〜 | Hashing / Embedding / 集約特徴量 | One-hot は次元爆発 |
「ID は識別子であってカテゴリではない」は特徴量設計の最重要原則の 1 つ。ID をそのまま使うのではなく、その ID の過去の行動を集約した数値特徴量に変換するのが定石。
関連ノート: カテゴリ変数のエンコーディング / データリーク / 次元の呪い
Q15: 学習曲線から次の打ち手を決める
Claude に二値分類モデルを組ませて学習させたところ、訓練 accuracy が 65%、検証 accuracy が 63% だった。目標は 85% で、まだ大きく届かない。次の手として「データ量を変えながら学習曲線を引く」を試したところ、訓練線・検証線ともに 60% 台前半でほぼ平行に伸び、データを増やしても両方とも頭打ちで上限が動かなかった。次に取るアクションとして最も筋の良いものを 1 つ選び、理由も添えてください。
選択肢:
- a) L2 正則化の係数を強める、または L1 正則化を導入する
- b) より表現力の高いモデル(深い決定木・勾配ブースティング・大きな NN)に切り替える、または有用そうな特徴量を増やす
- c) 訓練データをさらに大量に集める
- d) Early stopping を有効にして学習を途中で止める
解答を見る
正解: b) より表現力の高いモデルに切り替える、または特徴量を増やす
学習曲線が「訓練 ≒ 検証で両方とも目標未満、データを増やしても平行に頭打ち」のパターンは バイアス-バリアンス分解 の枠組みでいう high bias (未学習) の典型サイン。モデルが訓練データの傾向すら表現しきれていない状態で、容量不足または有用特徴量の不足が原因と推察される。
a / c / d はいずれも high variance (過学習) 用の薬で、今回の症状には効かない、あるいは逆効果になる。
選択肢ごとの読み解き:
- a) 正則化強化: 容量を「下げる」方向の操作。high bias の状態でさらに表現力を絞ると Total error は悪化する
- b) 正解: 容量を上げる / 特徴量追加が high bias への効く薬。学習エポックを増やす、正則化を弱めるなども同じ方向
- c) データ追加: high variance なら有効だが、high bias の場合は「表現力の天井」が動かないので Total error は下がらない
- d) Early stopping: 訓練が進んで検証スコアが下がり始めるのを止める手法。今回は両方とも上がりきっていないため、途中で止めるとさらに学習不足を悪化させる
判断軸(学習曲線で診断する):
| 症状 | 診断 | 効く薬 |
|---|---|---|
| 訓練 ≒ 検証、両方とも目標未満で頭打ち | High bias (未学習) | 容量を上げる / 特徴量追加 / 学習を長く回す / 正則化を弱める |
| 訓練 ≫ 検証、ギャップが顕著、訓練は十分高い | High variance (過学習) | データ追加 / 正則化強化 / Early stopping / 容量を下げる |
| 訓練 ≈ 検証、両方とも十分高い | Just right | そのまま運用 |
学習曲線を引かずに「データを増やせば良いだろう」と反射的に c を選ぶのが頻出の失敗パターン。曲線の形を見てから打ち手の方向を決める習慣が定着すると、無駄な改善サイクルを避けられる。
関連ノート: バイアス-バリアンス分解 / 過学習 / 正則化 / 交差検証