タグ・31本
機械学習
LightGBMでCSV読込後に予測できないとき、カテゴリ型を復元する
CSVを読み直すとLightGBMの予測が止まる。model.txtに残るカテゴリ一覧を使い、NA・001・空文字を復旧しました。戻せる情報と失われた情報の違い、列順の落とし穴、復旧関数の使い方を示します。
pandasのshift(1)で「前日」を作ったら、2日前の値が入っていた
日付が抜けるとshift(1)は前日ではなく前の行を返します。NaN同士でも参照日が違う例を13行の人工データで確認。自分のCSVでずれた日付を探し、前日値と3日平均を作り直すコードを紹介します。
LightGBMのNo further splitsは無視していい?警告100回と0回を比べた
No further splitsが100回出たモデルは、0回のモデルより誤差が小さくなりました。警告の件数で学習失敗を決められない理由を実測で確認し、手元のモデルの木・予測・誤差を調べる診断関数も紹介します。
明日のパンは何個焼く? Timestralが広げる「予測の幅」
MistralのTimestralを、パン屋の仕込みを例に考えます。予測の幅や明日の予定を使う面白さと、「売れた数」をそのまま需要とみなす難しさ。
分類のしきい値0.5は最適か—不均衡データでF1の改善幅を比較
分類のしきい値を0.5から変えると、見逃しと誤検知はどう変わるのか。少数派5〜50%の合成データでロジスティック回帰とLightGBMを比較しました。F1の改善幅、目的による閾値の違い、テストデータで調整すると成績を過大評価する理由を解説します。
XGBoostとLightGBMの比較はseedで変わるか—評価件数と順位の安定性を検証
モデル比較で出た僅差を、1回の結果だけで判断してよいのでしょうか。Adultデータで分割を120回変え、訓練件数と評価件数を分けて比較しました。評価だけを減らすとLightGBMの勝率は99.2%から66.7%へ低下。AUC差のばらつきと逆転割合を確認する方法を紹介します。
同じ人が学習・検証の両方に入ると?交差検証のROC-AUCを実測比較
交差検証で同じ人の行が学習側と検証側にまたがると、スコアは新規グループでの評価より高く出ました(今回の合成データのROC-AUC平均で、KFoldは+0.085、StratifiedKFoldは+0.084)。GroupKFoldならまたがりは全シードで0件です。不均衡データでの層化の効きどころも合成データで実測しました。
sklearnの既定値で精度が下がる場所を6データで実測—最初に疑うのはスケーリング忘れ
scikit-learnを既定のまま使うと精度が下がる箇所を、6つの分類データで比較しました。スケールがバラバラなwineではSVMの正解率が標準化だけで0.672から0.983へ上がる一方、元から同尺度の手書き数字ではわずかに下がります。max_iterとCの調整では改善を確認できませんでした。
LightGBMでゼロが多い件数・金額を予測する—Poisson・Tweedieの選び方
ゼロが多い件数・金額データで、LightGBMのPoisson・Tweedie・二乗誤差・log1pを比較しました。1行ごとの誤差と予測合計で結果が逆になった条件から、目的関数を選ぶ基準を整理します。
不均衡回帰で稀な高値を予測する—LightGBMの8条件を比較
LightGBMの回帰で少数の高値だけ大きく外れるとき、重み付け、リサンプリング、分位点回帰、対数変換のどれを試すべきか。高値側のMAEと全体RMSEを合成データと住宅価格データで比較し、改善と悪化の交換を整理します。
scikit-learnモデルのバージョン互換性—pickle・joblib・skops・ONNXの予測差を実測
scikit-learn 1.5.2で保存した2モデルを1.9.0で読み込むと、pickle・joblib・skopsは予測確率が完全に一致しました。ONNXだけは警告なしで1,000件中2件の判定が反転し、その差はバージョン違いではなく変換と推論の経路で生じていました。
Permutation Importanceは相関する特徴量でどう変わる?PFIとdrop-columnを比較
相関する特徴量があるとき、データを作った式での寄与を正解に採ると、相関0.8で生成式の第1位と一致しなくなったのはPermutation Importance(PFI)ではなくdrop-columnでした。合成データで相関を0から0.999まで動かし、生成式の寄与と各手法の順位・配分がどこでずれるかを測っています。再学習するdrop-columnと、学習済みモデルを測るPFIは問いが異なります。
SHAPの特徴量重要度は正しい?—正解つきデータでずれの原因を検証
SHAPの特徴量重要度は本当に当たっているのか、真の答えが分かる合成データで採点しました。重要度に開きがあれば木モデルの並び順は当たる一方、効果がゼロの列にも重要度が配られ、相関が強いと上位へ食い込みます。手元のモデルを乱数列で点検する手順まで載せています。
ターゲットエンコーディングのデータリーク—無関係な列のAUCが0.795まで上がった
ターゲットエンコーディングを全データのカテゴリ平均で作ると、無関係な乱数列でも交差検証AUCが0.795まで上がりました(独立ホールドアウトでは0.499)。平滑化(スムージング)を強めても上振れは頭打ちで残り、out-of-fold実装なら0.5付近へ戻りました。どんな条件で見かけのスコアが膨らむかも、水準数と件数を変えて実測しています。
回帰の評価指標はどう選ぶ?RMSE・MAE・MAPEの違いを比較
RMSE・MAE・MAPEで回帰モデルの1位が入れ替わったら、どれを信じればよいのでしょうか。8モデルを比較すると、RMSEとMAEの1位一致率は、右への偏りだけを強めた条件より、予測できない外れ値を混ぜた条件で大きく下がりました。実測値がゼロ付近ではMAPEも不安定になります。外したときの損失から主指標を決める手順を整理します。
変化点検知はペナルティ次第でF1が3倍変わる—手法を選ぶより先に決める設定
変化点検知のライブラリ ruptures で、手法とペナルティのどちらが結果を左右するかを実測しました。同じ Pelt でも F1 は 0.275 から 0.931 まで動き、真の変化点が平均4.4本のところ平均37.0本を検出した条件もありました。位置が分かっている合成信号で3手法とペナルティ4水準を採点し、自分のデータで値を決める手順までまとめました。
ARIMA・指数平滑はナイーブ予測に勝てるか—平均では勝ち、週次では4割の系列で勝てなかった
ARIMAや指数平滑が「前の値をコピーするだけ」のナイーブ予測に勝てているかをM4データの859系列で実測しました。平均誤差では古典手法が勝ちますが、系列ごとに見ると週次では4割で勝てていません。月次で最下位だったのは季節ナイーブでした。
正解率99%でも少数派recallは0—不均衡データで何を見るか
不均衡データの評価指標に正解率を使うと、少数派1%ではダミー分類器でも99%に届き、少数派を1件も当てられません。実力差はPR-AUCと少数派recallに現れました。ただし学習済みモデルでも少数派を全件見逃す回があり、1回の測定では優劣を決められません。3つの不均衡度×20シードで実測しています。
KNN・MICEの欠損値補完を実測—効き目は下流モデルで大きく変わる
scikit-learnのKNNImputerやIterativeImputer(MICE)のような手の込んだ補完が中央値補完より効くかは、補完のあとに学習するモデルで変わりました。線形モデルでは差が残る一方、LightGBMでは埋めた値の誤差を3割以上減らしても得点はほとんど動きません。MICEが想定どおりの欠損(MAR)でかえって悪化した予想外れも含め、2データセット・欠損機構3種・欠損率3水準・seed10本で実測しました。コピペで動くサンプルつき。
予測確率のキャリブレーションを実測—Platt・Isotonicが効くモデル、効かないモデル
歪んだ予測確率をPlattスケーリングとIsotonic回帰でキャリブレーション(較正)すると、確率のずれ(ECE)はGaussianNBで約0.078から0.017まで下がる一方、順位づけ(ROC-AUC)への影響は最大0.0017で確認できませんでした。効くモデルと効かないモデルの違い、データ量によるPlatt/Isotonicの選び方、小さなECE差を読むときの注意点まで、scikit-learnのCalibratedClassifierCVを使い3モデル×10シードで実測しています。コピペで動くサンプルつき。
解約予測で、追跡が途中で終わった「打ち切り」のデータを未解約の0として扱ってよいのでしょうか。二値分類、打ち切りの除外、生存分析(Cox)を合成データで比べると、0として扱った場合は追跡切れ68.5%の条件で解約率を相対で約18%低く見積もりました。解約率がずれる理由と、手法を選ぶ際の確認点を説明します。
本番の機械学習モデルを運用する人向けに、panderaとは何か、DataFrameSchemaの基本的な使い方、推論前に検出できる入力異常と検出できない変化を実測結果から解説します。
EBMとLightGBMを比較|精度・学習時間・交互作用の違い
EBM(Explainable Boosting Machine)とLightGBMを実データ3件で比べると、ROC-AUCの差はどちらの向きも0.012以下でした。代わりに開いたのは学習時間で、全21セルの平均は73.00秒対0.116秒。3つの特徴量が同時に効く合成データではEBMが0.509まで落ちます。
不均衡データにSMOTEやクラス重みを最初から入れるべきか、LightGBMの無処置を基準に測りました。合成データ4水準でも実データ1件でも、4つの対策は無処置の平均PR-AUCを一度も上回れません。少数派1%では無処置0.558に対しSMOTE 0.494で、差は不均衡が強いほど広がりました。
Claude Codeはデータリークを見抜いた—対策が書いてあるのに効いていないコードでも
コードレビューでデータリークを見つけられるかを実測しました。手元の採点だけが嘘になるリークを6種類仕込み、Claude Code(Sonnet 5)に読ませたところ、対策が書いてあるのに効いていない難しい版で34回中33回、易しい版と合わせて70回中69回で機序まで言い当てています。代わりに、正しいコードを疑う指摘が出ました。手元で試せる検証コードつき。
LLMの自動評価スコアをそのまま平均してよいか—信頼区間の落とし穴とPPI
人手評価できる件数は限られる一方、モデルなら大量に採点できます。そのモデル採点をそのまま平均して信頼区間を付けてよいのかを、真の平均が分かる合成データで4,000回の反復から実測しました。予測平均が0.10偏った条件では、2万件から作った95%信頼区間の幅が±0.013まで狭まる一方で真値を4,000回とも外し、人手評価を増やしても改善しません。少数の人手評価でその偏りを補正するPPIでは、人手評価だけを使う場合より区間を約28%狭くしたまま妥当性を保てました。実際のLLMは使わず、一次式の予測器で検証しています。
決定木の代理モデルはどこまで信頼できる?LightGBMとの一致率を検証
LightGBMの判断を浅い決定木で説明するとき、その代理モデルは本体をどこまで再現できるのでしょうか。合成二値分類で本体との一致率(忠実度)を測りました。複雑な条件では、人が読める深さ3で平均60.9%。深さ12・葉415枚まで増やしても66.9%にとどまり、学習データ上の一致だけが伸びました。
交差検証の前に前処理するとCVはどれだけ変わるか—特徴選択・SMOTE・標準化を実測
交差検証の前に前処理を全データへ当てると、CVスコアが本来より高く出ることがあります。4種類を測ると、標準化と欠損補完では差を確認できず、列数の多いデータでの特徴選択で平均0.027、分割前のSMOTEは木モデルで0.1を超えました。合成データ10シードの実測とコピペで動くサンプルつき。
データリーク5パターンで交差検証はどれだけ甘くなるか—分割前SMOTEは+0.24、前処理の順序ミスは差を確認できず
機械学習のデータリーク5パターンを合成データに作り込み、交差検証のスコアがリークなしの評価用データよりどれだけ高く出るかをLightGBMで実測しました。この強度設定では分割前SMOTEが+0.24、よく警告される標準化・欠損補完の順序ミスでは差を確認できませんでした。上振れの大きさはパターンごとの設定に依存し、危険度の順位ではありません。手元で試せる実装例つきです。
特徴量の「全部盛り」はGBDTの精度を下げるか—5手法を実測比較
特徴量を全部盛りにしても、GBDT(LightGBM)の held-out 精度は今回は壊れませんでした。数値信号が豊富な合成データではむしろ改善する一方、実データ adult では精度が動かないまま特徴量数と学習時間だけが数倍に増えました。合成2種と実データ2種でablation比較し、手元で試せる実装例つきで記録します。
XGBoost・LightGBM・CatBoost比較—精度と学習時間で選ぶ
XGBoost・LightGBM・CatBoostを既定設定で比べると、CatBoostのROC-AUCが最も高いものの、adult全件ではLightGBMと表示4桁で一致し、magic全件では差が残りました。今回のCPU・既定設定ではCatBoostの学習時間は最速ライブラリの16〜40倍。二値分類3データセット計10条件の実測から、データごとの精度差と学習回数に応じた選び方を整理します。