📚 背景知識(読んでから問題へ)
今の決め方(決定15、Day175〜177 で ◎)。 乱数なし LightGBM(学習率 0.1・300本)の葉 31/63/127/255 を作り、補正CV(決定13: √(C² − A_test))が最良のものを基準にする。葉255 が最良なら葉511 を1本足して比べる。40ワールドで最悪の損 0.88(×10⁻⁴)。
残っていた疑い。 学習率と本数は、葉の数と効き方が絡む。LightGBM の公式の調整ガイドは、精度を上げる手として "Use small learning_rate with large num_iterations" と "Use large num_leaves (may cause over-fitting)" を並べている([Parameters Tuning](https://lightgbm.readthedocs.io/en/latest/Parameters-Tuning.html)、参照 2026-10-11)。学習率を下げると1本の木の寄与が小さくなるので、「大きい木の過学習が和らぎ、山が大きい側(葉511)へ動く」ことはありうる。動くなら、決定15 の一覧と止め方を学習率ごとに作り直す必要がある。
用語整理:
| 用語 | 意味 |
|---|---|
lgb_det | 乱数なし LightGBM、学習率 0.1・300本・葉31(基準。差はすべてこれとの差) |
leaf63〜leaf511 | 同じ設定で葉だけ変えたもの(Day175・176 の保存物) |
s31〜s511 | 今日作った 学習率 0.05・600本・葉 31〜511(他は同じ) |
| 真の差 | 5本平均(提出と同じ形)の truth 60,000行 RMSLE の差 |
| 山 | 葉を増やしていくと良くなり、どこかで悪化に転じる。その最良の葉 |
| 損 | 方針で選んだ1本の真の RMSLE − その世界の候補10本の真の最良 |
数値はすべて縮小シミュレータの上の実測(S5E5 の構造を写した合成データ、Day163〜)。実データで同じになるとは限らない。
データ・保存物の構造(スキーマ)
| 名前 | 形・型 | 意味・作り方 | 使う場所 |
|---|---|---|---|
| Sex … Body_Temp, Dur_x_HR, Keytel_kcal | int / float(9列) | Day163〜177 と同じ合成(ワールドの乱数 3000+番号)。Calories の雑音だけ 0.05/0.03(低)・0.12/0.08(小得)・0.15/0.10(中) | 全候補 |
| raw178_w*.npz(今日、w0-5 × 3世界) | oof (6,30000)・evk (6,5,80000) float32・fit_s (6,)・curve (6,5,4) | 今日の新規: lgb_det(再現確認)+ 学習率 0.05・600本の葉 31/63/127/255/511。curve は各 fold モデルの truth 二乗誤差(150/300/450/600本) | 表1〜7 |
| raw175 / raw176(lr0.1) | oof・evk | Day175〜177 の保存物(葉31/63/127、葉255/511)。今日の lgb_det と最大差 0.0 | 表1〜5 |
| T5 / Ca / C / A | float | 5本平均の truth RMSLE(真)/補正CV √(C²−A_test)/生の CV/5本の分散(test 2万行) | 山・残り・方針の損 |
評価指標(RMSLE)と、今日の問い
RMSLE は log1p 空間の RMSE(小さいほど良い)。差はすべて ×10⁻⁴。下の図は、葉の数を増やしたときの真の差を2つの学習率で重ねたもの。山(最良の葉)は3世界とも学習率で動かなかった。
❓ 問題
タスクA(予想を書いてから測る)
- 学習率 0.05・600本にすると、同じ葉でどれくらい良くなると思うか。葉31 と葉511 で得は同じか
- 山の位置は動くか。動くならどちら向きか、理由を1行で
- 学習率を下げると費用はほぼ2倍(本数が倍)と見積もってよいか
タスクB(コーディング)
day176.pyの生成部を1文字も変えずに、候補をlgb_det(再現確認用)+s31〜s511にしたday178.pyを書く。各 fold モデルの truth 誤差を 150/300/450/600 本目で記録する- 各世界 6ワールド(計18)で回し、
lgb_detが Day175 の保存物と完全一致することを確かめる analyze178.pyで、真の差・同じ葉の学習率の得・山の位置・補正CV の残り・基準選びの方針6つの損・費用を出す
タスクC(分析・戦略)
- 決定15 は学習率 0.05 でも同じ形で使えるか
- 「全部を lr0.05 で作る」「両方の学習率から選ぶ」「lr0.1 で葉を選び、その1本だけ lr0.05 で作り直す」のどれを採るか。損と費用で決める
- 600本は足りているか、多すぎるか
💡 ヒント
ヒント1(方向性)
「山が動くか」と「最終提出をどう作るか」は別の問い。前者は表で、後者は損と費用の両方で答える。
ヒント2(アプローチ)
同じワールド・同じ分割・同じ fold で lr0.1 と lr0.05 を作れば、同じ葉どうしの差は対で比べられる(ワールドの難しさが消える)。途中本数の誤差は predict(X, num_iteration=k) で、学習し直さずに取れる。
ヒント3(コード骨格)
SLOW = dict(learning_rate=0.05, n_estimators=600) DET = [("lgb_det", dict()), ("s31", dict(SLOW)), ("s63", dict(SLOW, num_leaves=63)), ("s127", dict(SLOW, num_leaves=127)), ("s255", dict(SLOW, num_leaves=255)), ("s511", dict(SLOW, num_leaves=511))] CURVE = [150, 300, 450, 600] ... for i, it in enumerate(CURVE): p = np.log1p(np.clip(np.expm1(m.predict(XE[N_TEST:], num_iteration=it)), 1, None)) curve[j, k, i] = ((p - ltru) ** 2).mean()
✅ 模範解答
タスクA(予想。測る前に書いたもの)
- 得は −1〜−3 程度。大きい木ほど過学習が和らぐので得が大きい、と予想
- 山は大きい側へ半段(低雑音 63/127 → 127、中雑音 255 → 255/511)動く、と予想
- ほぼ2倍、と予想
→ 1 は「小さい」は当たり、「大きい木ほど得」は外れ。2 は外れ。3 も外れ(2.4〜3.0倍)。下の実測を参照。
タスクB(完全なコード)
day178.py(day176.py との差分。生成部・分割・random_state は同じ):
LG = dict(objective="regression", learning_rate=0.1, n_estimators=300, num_leaves=31, min_child_samples=20, n_jobs=1, verbose=-1) # Day178: 学習率 0.05・600本で葉 31/63/127/255/511 を作る。lgb_det(lr0.1・300本)は raw175 との一致確認用(決定9) SLOW = dict(learning_rate=0.05, n_estimators=600) DET = [("lgb_det", dict()), ("s31", dict(SLOW)), ("s63", dict(SLOW, num_leaves=63)), ("s127", dict(SLOW, num_leaves=127)), ("s255", dict(SLOW, num_leaves=255)), ("s511", dict(SLOW, num_leaves=511))] CURVE = [150, 300, 450, 600] # 1 fold モデルの truth 二乗誤差(log1p 空間)を途中の本数で記録 names = [c[0] for c in DET] ... curve = np.full((len(names), 5, len(CURVE)), np.nan) ltru = np.log1p(evalset.Calories.values[N_TEST:]) for k, (tr, va) in enumerate(KFold(5, shuffle=True, random_state=0).split(train)): ... for j, (nm, over) in enumerate(DET): t1 = time.time() m = lgb.LGBMRegressor(**{**LG, **over}, random_state=1000 * 0 + k).fit(X, y) oof[j, va] = m.predict(XV); evk[j, k] = m.predict(XE) fit_s[j] += time.time() - t1 # 費用は途中本数の記録を含めない if j > 0: for i, it in enumerate(CURVE): p = np.log1p(np.clip(np.expm1(m.predict(XE[N_TEST:], num_iteration=it)), 1, None)) curve[j, k, i] = ((p - ltru) ** 2).mean() np.savez_compressed(f"raw178_w{W}.npz", oof=oof, evk=evk, ytr=train.Calories.values, yev=evalset.Calories.values, names=np.array(names), fit_s=fit_s, curve=curve)
analyze178.py(要点。全文は保存物):
def score(y, ytru, O, E): c2 = ((lp_clip(O) - np.log1p(y)) ** 2).mean() a_te = E[:, :N].var(axis=0).mean() t5 = np.sqrt(((lp_clip(E[:, N:].mean(0)) - np.log1p(ytru)) ** 2).mean()) return dict(C=np.sqrt(c2), Ca=np.sqrt(c2 - a_te), T5=t5, A=a_te) def pick(row_ca, lst, edge=None, extra=None): # 決定15: 補正CV 最良、端なら1本足す b = row_ca[lst].idxmin() if edge is not None and b == edge: b = row_ca[lst + [extra]].idxmin() return b POL = { "決定15 L4(lr0.1)+端なら511": lambda r: pick(r, FAST[:4], "leaf255", "leaf511"), "同じ規則を lr0.05 に": lambda r: pick(r, SLOW[:4], "s255", "s511"), "両方の10本から補正CV最良": lambda r: r[ALL].idxmin(), "決定15 で葉を選び lr0.05 で作り直す": lambda r: TO_SLOW[pick(r, FAST[:4], "leaf255", "leaf511")], "常に s255": lambda r: "s255", "常に leaf255": lambda r: "leaf255", }
実行:
# 各世界 w0-5 の18ワールドを 6 並行で作る(run.sh は Day177 の uv venv と scikit-learn 同梱の libomp を使い、w>=6 は飛ばす) (for w in $(seq 0 15); do echo "$w 0.05 0.03 low"; [ $w -lt 12 ] && echo "$w 0.15 0.10 mid" && echo "$w 0.12 0.08 sm"; done) \ | xargs -P 6 -L 1 sh -c './run.sh day178.py $0 $1 $2 '"$(pwd)"'/r/$3' # 集計(引数: 今日の出力・Day175 の保存物・Day176 の保存物・Day177 で足した Day176 の残り) python analyze178.py r <d175> <d176> <d177/r176> > out178.txt # 方針の損の差を世界ごとの対で SE つきで出す python extra178.py
実行結果(実測)
# ============ 実行環境: macOS (M1, メモリ8GB)・Day177 の uv venv(Python 3.13.12・lightgbm 4.7.0)
# OMP_NUM_THREADS=1・n_jobs=1。他のセッション(postgres COPY・VM・Chrome)と同居し load average 13〜138
# 18ワールド × 6本 × 5 fold = 540 fit、壁時計 6,826 秒(1ワールド 1,338〜3,540 秒)
# 予定は40ワールドだったが、1ワールド約30分かかるため各世界 w0-5 で打ち切った(理由は「扱わなかった範囲」)
ワールド数: {'中雑音': 6, '低雑音': 6, '小得': 6}
再現(lgb_det 対 raw175、最大絶対差): OOF 0.0 fold別予測 0.0
=== 表1 真の差(対 lgb_det、×1e-4、平均±SE、良い割合)===
[低雑音 n=6]
lr0.1・300本 : leaf63 -3.36±0.49 leaf127 -2.84±0.49 leaf255 +1.69±0.69 leaf511 +9.40±0.79
lr0.05・600本: s31 -0.35±0.36(0.67) s63 -4.29±0.55(1.00) s127 -3.91±0.55(1.00) s255 +0.44±0.82(0.33) s511 +8.93±1.00(0.00)
[小得 n=6]
lr0.1・300本 : leaf63 -12.38±0.38 leaf127 -22.55±0.35 leaf255 -25.63±0.63 leaf511 -17.25±0.69
lr0.05・600本: s31 +0.22±0.28(0.33) s63 -12.80±0.41(1.00) s127 -23.13±0.28(1.00) s255 -25.84±0.41(1.00) s511 -18.01±0.81(1.00)
[中雑音 n=6]
lr0.1・300本 : leaf63 -15.99±0.72 leaf127 -31.67±0.38 leaf255 -36.88±0.58 leaf511 -29.11±1.12
lr0.05・600本: s31 +0.25±0.30(0.50) s63 -16.99±0.62(1.00) s127 -32.51±0.49(1.00) s255 -38.50±0.58(1.00) s511 -30.16±1.61(1.00)
=== 表2 同じ葉で lr0.05・600本 − lr0.1・300本(真、×1e-4、平均±SE、良くなった割合)===
[低雑音] 葉31 -0.35±0.36(0.67) 葉63 -0.93±0.36(0.83) 葉127 -1.06±0.27(1.00) 葉255 -1.25±0.40(0.83) 葉511 -0.46±0.43(0.67)
[小得] 葉31 +0.22±0.28(0.33) 葉63 -0.42±0.28(0.83) 葉127 -0.59±0.37(0.67) 葉255 -0.21±0.26(0.50) 葉511 -0.77±0.44(0.83)
[中雑音] 葉31 +0.25±0.30(0.50) 葉63 -1.01±0.47(0.83) 葉127 -0.84±0.28(1.00) 葉255 -1.62±0.24(1.00) 葉511 -1.05±0.58(0.67)
=== 表3 山の位置(真の最良の葉、ワールド数)===
[低雑音] lr0.1: {63: 4, 127: 2} lr0.05: {63: 3, 127: 3} s255−s127 +4.35±0.51(0/6) s511−s255 +8.49±0.32(0/6)
[小得] lr0.1: {255: 6} lr0.05: {255: 6} s255−s127 -2.70±0.23(6/6) s511−s255 +7.82±0.59(0/6)
[中雑音] lr0.1: {255: 6} lr0.05: {255: 6} s255−s127 -5.98±0.38(6/6) s511−s255 +8.33±1.16(0/6)
(参考 Day177 の lr0.1・40ワールド: 511−255 低 +8.16 / 小得 +8.41 / 中 +7.72 → 学習率を変えても「255→511 で約 +8 戻る」はそのまま)
=== 表4 補正CV の残り(CV差−真の差、対 lgb_det、×1e-4)と生CVの偏り ===
[低雑音] s31 生-0.33 補正後+1.25±1.05 s63 生+3.89 +0.91±1.56 s127 生+9.13 +0.47±2.64 s255 生+17.63 +2.21±3.50 s511 生+24.73 +2.64±4.27
[小得] s31 生-1.09 +0.69±0.50 s63 生+3.80 +0.37±1.38 s127 生+11.00 +0.59±2.28 s255 生+20.30 +1.67±3.53 s511 生+29.07 +1.67±2.87
[中雑音] s31 生-2.87 -1.06±0.42 s63 生+5.16 +1.15±1.31 s127 生+12.98 +1.32±2.53 s255 生+24.20 +3.46±3.66 s511 生+30.56 +0.14±2.47
(15組中14組が 2SE 以内。例外は中雑音 s31 の −1.06±0.42(2.5SE、15回検定すれば1回は出うる大きさで、向きも他の世界とそろわない)。生の偏りは葉とともに育ち、中雑音 s511 で +30.56)
A(5本の分散、二乗×1e-4)中雑音: lgb_det 5.89 s31 5.06 s63 7.65 s127 11.03 s255 15.10 s511 19.51
=== 表5 基準選び(補正CV で選ぶ)の損(×1e-4、対 その世界の10本の真の最良)===
中雑音 低雑音 小得 最悪 1ワールドの費用(中央値秒)
決定15(lr0.1 の L4+端なら511) 2.23 2.57 0.91 2.57 約 110(概算: 葉63 は記録なし)
決定15 で葉を選び lr0.05 で作り直す 0.78 1.52 0.62 1.52 約 110 + 選んだ1本(s63 41〜s255 147)
同じ規則を lr0.05 に 0.78 1.37 1.59 1.59 285(+s511 のとき 343)
両方の10本から補正CV最良 1.71 1.71 1.80 1.80 約 395〜850
常に s255 0.00 5.15 0.14 5.15 147
常に leaf255 1.62 6.40 0.34 6.40 51
=== 追加 方針の損の差(世界ごとの対、×1e-4、平均±SE、良くなった割合)===
作り直し − 決定15 中 -1.46±0.33(6/6) 低 -1.05±0.38(5/6) 小得 -0.29±0.27(3/6)
lr0.05規則 − 決定15 中 -1.46±0.33(6/6) 低 -1.20±1.28(5/6) 小得 +0.68±0.75(2/6)
作り直し − lr0.05規則 中 +0.00±0.00 低 +0.15±1.10 小得 -0.97±0.63
2つの学習率で選んだ葉が同じ割合: 中 1.00 低 0.50 小得 0.67
=== 表6 1 fold モデルの truth RMSLE(×1e-4、5 fold・ワールド平均)の途中本数 ===
150 300 450 600 600本が最良のワールド
低雑音 s63 1577.1 1573.4 1572.7 1573.1 1/6
低雑音 s255 1583.5 1583.9 1586.9 1590.3 0/6(150本以前が山)
低雑音 s511 1589.6 1595.0 1600.9 1605.6 0/6
中雑音 s127 2269.9 2256.4 2251.4 2249.5 6/6
中雑音 s255 2263.1 2251.5 2250.8 2252.9 0/6(450本付近が山)
中雑音 s511 2263.7 2259.2 2264.5 2270.8 0/6(300本付近が山)
(s31 は3世界とも 600本でまだ下がっている)
=== 表7 費用(1ワールド5fold、中央値秒、同居実測)===
lgb_det 12 s31 25 s63 41 s127 72 s255 147 s511 343 (lr0.1: leaf255 51・leaf511 116、Day176/177 の記録)
同じ葉の lr0.05 / lr0.1 の比: 葉255 2.9倍・葉511 3.0倍(本数の比 2倍より大きい)
タスクC(分析・戦略の模範)
- 決定15 の形(一覧 31〜255、端なら511)は lr0.05 でもそのまま使える。 山は 18ワールドすべてで同じ葉(低雑音 63/127、小得・中雑音 255)にあり、255→511 で約 +8 戻ることも lr0.1(Day177 の40ワールド)と同じ。補正CV の残りも15組中14組が 2SE 以内(例外は小さい木の s31 中雑音 2.5SE)で、決定13 は学習率を変えても持つ。予想(山が大きい側へ動く)は外れた。公式ガイドの「小さい学習率と多い本数」と「大きい num_leaves」は、このデータでは独立に効き、掛け合わせて山を動かすことは無かった
- 「葉は lr0.1 で選び、選んだ1本だけ lr0.05 で作り直す」を採る(決定18)。 最悪の損は 1.52 で6案の中で最小、決定15 そのまま(2.57)より −1.05。次点の「同じ規則を lr0.05 に」(1.59)とは差が無い(対で +0.15±1.10 / −0.97±0.63)が、費用は約半分。作り直しの得は対で中雑音 −1.46±0.33(6/6)・低雑音 −1.05±0.38(5/6)で、小得は −0.29±0.27(差なし)。全部を lr0.05 で作っても、選ぶ葉は 2つの学習率で 50〜100% 同じなので、比べる段階に遅い学習率を使う得は無い。「両方の10本から選ぶ」は候補を増やした分だけ補正CV の揺れ(Day177 で SD 3〜8)に負けて損が増えた(1.80)
- 600本は、葉255 以上では多すぎる。 1 fold モデルの曲線では、中雑音 s255 は 450本付近、s511 は 300本付近、低雑音 s255・s511 は 150本以前が山で、600本では 0/6。逆に葉31 はまだ下がっている。ただしこれは1本のモデルの曲線で、提出(5本平均)の山は平均で過学習が和らぐ分だけ後ろにずれる可能性がある(未計測)。本数は葉と組で決まるので、作り直しの1本は「葉ごとに本数も選ぶ」余地が残る(次回)
タスクD(決定)
| # | 決定 | 採った案 | 採らなかった案と理由 | 前提が変わったら |
|---|---|---|---|---|
| 15(印 ◎ のまま、学習率への頑健さを追記) | 葉を選ぶ段は学習率 0.1・300本で、一覧 31/63/127/255+端なら511 | 18ワールドで山の位置が lr0.05 と同じ。補正CV の残りも15組中14組が 2SE 以内 | 一覧を学習率ごとに作り直す: 山が動かないので不要 | 学習率 0.02 以下・本数 1,500 以上など、さらに遠い設定では未計測。そこへ行くなら 6ワールドで山を確かめ直す |
| 18(新設、印 ○) | 最終提出は、決定15 で選んだ葉を学習率 0.05・600本で作り直した1本 | 最悪の損 2.57→1.52、対の得は中雑音 6/6・低雑音 5/6。追加費用は1本(41〜147秒) | (a) 全部を lr0.05 で比べる: 損 1.59 とほぼ同じで費用 2.6倍。(b) 10本から選ぶ: 損 1.80、候補が増えた分だけ選び間違う。(c) 常に s255: 低雑音で 5.15 | 作り直しの1本が葉255 以上なら 600本は多すぎる(表6)。本数を葉ごとに選ぶ手順を足したら、ここを測り直す。6ワールドなので印は ○ |
📊 結果の可視化
1枚目: 葉は lr0.1 で選び、その1本だけ lr0.05 で作り直す方針が最悪の損 1.52 で最小、費用も全部を lr0.05 で作る案の約半分。2枚目: 葉255 以上では 600本が多すぎる。作り直しの1本は本数も選ぶ余地がある(次回)。
🪜 Step-by-Step 解説
Step 1: 予想を先に書く
予想を書かずに測ると、どんな結果も「やはり」と読めてしまう。今日は「山は大きい側へ動く」と書いてから測り、外れた。
Step 2: 生成部を変えず、再現を確かめる
day178.py は候補の一覧だけを変えた。基準 lgb_det は Day175 の保存物と OOF・fold 別予測とも最大差 0.0(決定9)。これで Day175〜177 の lr0.1 の保存物と同じワールドとして並べられる。
Step 3: 同じ葉どうしを対で比べる
ワールドごとの難しさは同じ葉の差で消える。得は −0.2〜−1.6 で、葉31 では差なし(+0.2〜−0.4)。「大きい木ほど得」という予想も、葉511 の得(−0.5〜−1.1)が葉255 と同程度で外れた。
Step 4: 山の位置を見る
最良の葉の数え上げ(表3)と、隣どうしの差(255−127、511−255)の両方を見る。数え上げだけだと引き分けの多い低雑音(63 と 127 の差 +0.38±0.58)で揺れて見えるので、差の向きと大きさで判断した。
Step 5: 方針を損と費用で並べる
損だけなら「同じ規則を lr0.05」と「作り直し」はほぼ同じ。費用を並べると作り直しが半分で済む。損の差は世界ごとの対で SE をつけ、小得では差が無いことも書いた。
Step 6: 本数の曲線で次の問いを見つける
600本が大きい木には多すぎることが分かった。これは今日の結論(作り直し)を壊さないが、作り直しの1本をさらに良くする余地として次回に回す。
📐 数学・統計の補足(文系向け)
学習率は「1歩の大きさ」。 勾配ブースティングは、前の木の間違いを次の木が少しずつ直していく。学習率 0.1 なら毎回間違いの1割だけ直す、0.05 なら5%だけ。1歩を小さくすると同じ距離を進むのに倍の本数が要るが、細かく刻むぶん行き過ぎ(過学習)が少し減る。今日の得 −0.2〜−1.6 は、その「刻みの細かさ」の効果の大きさ。
葉の数は「1歩でどれだけ細かく場合分けするか」。 葉が多いほど細かい規則を作れるが、データの偶然まで覚える。学習率は1歩の大きさ、葉の数は1歩の形なので、今日のデータでは両者はほぼ別々に効いた(山が動かなかった)。
なぜ費用が2倍を超えたか(仮説)。 学習率 0.1 では、後半の木は直す間違いが小さくなり、分割の得が小さくて早く止まる木が増える。0.05 では間違いが長く残るので、後半の木も最後まで葉を使い切りやすい。木1本あたりの手間が増え、本数2倍×1本の手間で 2.4〜3.0倍になった、と考えている(木ごとの葉の数は記録していないので未確認)。
二乗→RMSLE の換算は不要。 今日の表はすべて RMSLE そのものの差(×10⁻⁴)。
🏆 Kaggleでの実践的な使い方
- 調整は速い学習率で、提出は遅い学習率で。 葉の数など木の形は lr0.1 で比べ、決めた1本だけ lr0.05(本数2倍)で作り直す。今日のデータでは損が 2.57→1.52、追加費用は1本分
- 学習率を下げても、比べた順位はほぼ変わらない。 選ぶ葉は 2つの学習率で 50〜100% 一致。比べる段階から遅い学習率にすると、費用が 2.6倍になって損は同じ
- 本数は葉と組で決まる。 葉255 以上で 600本は多すぎた。early stopping を使うなら fold ごとに止まる本数が違うことに注意(今日は使っていない)
- 費用の見積もりは「本数の比」より大きく取る。 本数2倍で 2.4〜3.0倍かかった(同居環境の実測)
⚠️ よくある誤解・ミス
| 誤解・ミス | なぜ起こるか | 正しい理解 |
|---|---|---|
| 学習率を下げれば、もっと大きい木が使えるようになる | 「過学習が和らぐ」を一般化する | 今日のデータでは山は動かなかった(18/18)。得は同じ葉で −0.2〜−1.6 |
| 学習率を下げると必ず良くなる | 公式ガイドの「精度のため」を常に正しいと読む | 葉31 では差なし(+0.25〜−0.35)。大きい木では 600本が多すぎる |
| 比べる段階も遅い学習率でやるべき | 「最終と同じ設定で比べるのが正しい」 | 選ぶ葉はほぼ同じで、費用だけ 2.6倍。損も改善しない |
| 候補は多いほど良い(両方の学習率から選ぶ) | 選択肢が増えれば最良に近づくと考える | 補正CV の揺れに負けて損が 1.52→1.80 に増えた |
| 費用は本数に比例する | 1本の手間を一定と仮定する | 本数2倍で 2.4〜3.0倍 |
🧭 扱わなかった範囲と理由
- ワールド数(18、予定40): 同居環境(load 13〜138、メモリ8GB)で1ワールド 1,338〜3,540 秒かかり、40ワールドでは約4時間の見込みだったため、各世界 w0-5 で打ち切った(
run.shで w≥6 を飛ばした)。山の位置は 18/18 でそろい、対の差も多くが 2SE を超えるので結論は変わりにくいが、決定18 の印は ○ に留める。残り22ワールドは Mac mini で回す - 5本平均での本数の山: 表6 は1 fold モデルの曲線。提出(5本平均)の途中本数は記録していない
- 本数の上限を葉ごとに選ぶ(early stopping・本数の候補): 次回
- 学習率 0.02 以下・本数 1,500 以上: 費用がさらに 2.5倍以上かかるため未計測
- 木ごとの葉の数(費用が2倍を超えた理由の確認): 記録していない
- 乱数ありの候補(決定14 の後段)を学習率 0.05 で: 低雑音の raw172 が tmp から消えており、作り直しが要る
- 実データ(S5E5): 縮小シミュレータの上の数字のみ。S5E5 のルール確認・公開割合は Day171 で利用者の作業として切り出したまま
- 原典照合: LightGBM 公式の Parameters Tuning は今日照合した("For Better Accuracy" の節)。Nadeau & Bengio・Krogh & Vedelsby は未照合のまま
- 持ち越し: seed を変えた独立な10分割、mcs を下げる方向(5・10)、決定17 を CV設計書に1行足す、候補数 K と選択の上振れ、系統別の m(
et)、公開LB と2本目の枠、avg3 での損、OOF 側と test 側の seed の揺れの分離、noKeytel・raw7の補正後のずれ、補正CV と入れ子CV の比較、Day170 のハイブリッド・狭い10本の出し直し、SE 個数差と分割の新しさ(Day165)、Day162 の選択バイアス、真の効果ちょうど0の偽採用率
🚀 次のステップ
- 発展: 作り直しの1本で、本数を 300/450/600 から補正CV で選ぶと損がさらに減るか(5本平均の途中本数を保存して測る)
- 発展: 残り22ワールド(低雑音 w6-15・小得 w6-11・中雑音 w6-11)を Mac mini で回し、決定18 の印を ○→◎ にできるか確かめる
- 次回予告: Day 179 — Playground Series 実戦投入⑭(決定18 の作り直しの1本で、本数を葉ごとに選ぶ: 5本平均の途中本数 200〜600 を保存し、補正CV で本数を選ぶ規則が 600本固定より得か、費用込みで測る)。月替わりテーマ3「画像(CV)系コンペへの応用」は 10/25 から
📝 自己評価(解いた後に記入)
自分の回答・気づき・メモ: