Huber 回帰 ロバスト統計シミュレーター 戻る
ロバスト統計・回帰

Huber 回帰 ロバスト統計シミュレーター

外れ値が混ざったデータでも崩れにくい Huber 回帰(M-estimator)を体験するツールです。外れ値の割合と強度、切替閾値 δ を動かしながら、OLS(最小二乗)との推定バイアス・漸近相対効率 ARE・影響関数の上限を比べられます。

パラメータ設定
サンプル数 N
Huber 切替 δ
|残差|≤δ で二乗、|残差|>δ で線形。1.345·σ が標準
外れ値割合
%
外れ値強度
σ倍
外れ値のシフト量(真の雑音 σ の何倍か)
真の傾き β₁
真の雑音 σ
計算結果
外れ値数
OLS 推定傾き
Huber 推定傾き
OLS バイアス
Huber バイアス
漸近相対効率 ARE
散布図と回帰直線 — OLS(赤)vs Huber(青)

青点が通常データ、赤点が外れ値。赤線が OLS 推定、青線が Huber 推定。外れ値割合・強度を上げると OLS 線が傾き、Huber 線は真の傾き付近に踏みとどまります。

Huber loss プロファイル ρ_δ(r) — δ 切替
バイアス比較 — OLS vs Huber vs LAD
理論・主要公式

$$\rho_\delta(r) = \begin{cases} r^2/2 & |r|\leq\delta \\ \delta(|r|-\delta/2) & |r|\gt \delta \end{cases},\quad \delta=1.345\,\sigma$$

ρ_δ:Huber loss、δ:二乗から線形へ切り替える閾値。|r|>δ で線形成長することで、外れ値の影響を有界化する。

$$\psi_\delta(r)=\rho_\delta'(r) = \begin{cases} r & |r|\leq\delta \\ \delta\cdot\mathrm{sign}(r) & |r|\gt \delta \end{cases},\quad |\psi_\delta|\leq\delta$$

影響関数 ψ_δ:1 個のデータが推定値を動かす量。OLS は ψ(r)=r で無限大、Huber は |ψ|≤δ で有界(bounded influence)。

$$\mathrm{ARE}_{\mathrm{Huber}/\mathrm{OLS}}^{\mathcal{N}}(\delta=1.345\sigma)\approx 0.95$$

正規データ下での Huber と OLS の漸近相対効率。δ=1.345σ なら効率損失は 5% だけで、外れ値耐性が得られる。

Huber 回帰 — ロバスト統計と外れ値耐性

🙋
「ロバスト回帰」って聞いたんですけど、ふつうの最小二乗法(OLS)と何が違うんですか?外れ値が1個入っただけで結果が変わるって本当ですか?
🎓
本当。OLS は残差の二乗和 Σr² を最小化するから、|残差|>3σ の点が 1 個でも入ると、その点が二乗で効いてきて推定が大きく引きずられる。例えばセンサーが一瞬だけスパイク値を出した、入力ミスで桁が 1 つずれた、というだけで slope の推定値がガッツリずれる。左のスライダーで「外れ値割合」を 0 から 10% に上げると、赤い OLS 線が真の青線(傾き 2.0)からどんどん離れていくのが見えるよ。
🙋
じゃあ、外れ値を全部消してから OLS すればいいんですか?
🎓
それも一つの手だけど、「どれが外れ値か」を客観的に決めるのが難しい。3σ 基準で切ると、その境界付近のデータがランダムに残ったり消えたりして再現性が下がる。それに、データ自体が裾の重い分布(t 分布、ラプラス分布)で、外れ値というより「ふつうにそういう分布」のときもある。だから事前除去ではなく、「外れ値があってもそんなに影響を受けない推定量」を最初から使うのがロバスト統計のアイデア。それの代表が Huber 回帰だ。
🙋
Huber 回帰ってどんな仕組みですか?θ_δ で何かを切り替えるみたいですけど…
🎓
損失関数 ρ(r) を「|残差|が小さいうちは二乗、大きくなったら絶対値(線形)」と継ぎ目で滑らかにつなぐ。これが M-estimator(最尤型推定量)の一種で、Huber が 1964 年に提案したから Huber loss と呼ばれている。下のグラフで δ を動かすと、損失曲線の「放物線→直線」への切り替わり位置が変わるよ。δ を 1 に下げると LAD(中央値回帰)に近くなり、δ を 3 に上げると OLS に近くなる。標準は δ=1.345·σ で、これは「正規分布の純データに対する効率を 95% に保つ」ように決められた値だ。
🙋
「効率」って何ですか?OLS が 100% なら、Huber が 95% なのは劣化じゃないんですか?
🎓
いい質問。「漸近相対効率 ARE」というのは、十分大きな N のもとで推定量の分散がどれだけ小さいか、を OLS との比で見たもの。Huber は「外れ値ゼロの理想ケース」では確かに OLS よりほんの少し(5%)劣る。でも 1 個でも外れ値が入った瞬間、OLS の MSE は跳ね上がり、Huber は安定したまま。つまり Huber は「保険料 5%を払って、ほぼ全ての現実データで OLS より良い」推定量だと思えばいい。ちなみに LAD(中央値回帰)は正規データで効率 64% まで落ちるから、保険料が高すぎて常用には向かない。
🙋
じゃあ、Huber 回帰は完璧なんですか?どんなケースでも安心して使えますか?
🎓
残念だけど、Huber は「悪意ある攻撃」には弱い。崩壊点(breakdown point)は 1/n、つまり 1 個でも本当に巨大な値を入れられると、推定が任意の値に飛ばされ得る。これは「影響関数は有界だが、レバレッジ点(設計行列で x が極端な点)には弱い」からなんだ。本気の頑健性が必要なら、S-estimator や MM-estimator、LMS(最小中央値法)などの崩壊点 50% の手法を使う。実務的には Huber は「外れ値割合 10〜20% まで、レバレッジ点なし」のシナリオに最強で、scikit-learn、R の MASS::rlm、statsmodels に標準実装されているから手軽に試せる。

よくある質問

OLS(最小二乗)は残差の二乗和 Σr² を最小化するため、|残差|>3σ の外れ値が一つあるだけで推定値が大きく引きずられます。Huber 回帰は損失関数を「|残差|≤δ では二乗、|残差|>δ では絶対値(線形)」に切り替える M-estimator で、外れ値の影響を有界化します。δ=1.345·σ にすると、正規分布の純粋データに対する効率が約 95% に保たれ、外れ値が混入したときの頑健性も得られる、というのが Huber (1964) の中心的アイデアです。
実務的な定石は δ = 1.345·σ̂ で、σ̂ は残差の MAD(中央絶対偏差)から σ̂ = MAD/0.6745 として推定します。この値で「正規データに対する漸近相対効率 ARE ≈ 95%」が保証されます。δ を小さくすると LAD(中央値回帰)に近づき外れ値に強くなる一方、正規データでは効率が落ち、δ を大きくすると OLS に近づき外れ値に弱くなります。scikit-learn の HuberRegressor は epsilon=1.35 が既定値、R の MASS::rlm は k=1.345 が既定値です。
影響関数 ψ(r) は損失 ρ(r) の微分で、「1 個のデータが推定値をどれだけ動かすか」を表します。OLS では ψ(r)=r となり、|r| が大きいほど影響が無限大に増えるので外れ値に脆弱です。Huber では ψ(r)=r(|r|≤δ)または ψ(r)=δ·sign(r)(|r|>δ)となり、|ψ| ≤ δ で有界(bounded influence)です。これにより 1 個の外れ値が推定値を動かせる量に上限が付くため、頑健になります。漸近分散もこの ψ を使って計算できます。
Huber M-estimator の崩壊点は 0%(厳密には 1/n、漸近的にはゼロ)です。これは「悪意ある 1 点でも、十分大きな値を取れば推定を任意の値に飛ばせる」ことを意味します。なぜなら影響は有界でも、レバレッジが高い設計点 x にプロットされた外れ値は無視できないからです。本当に高い崩壊点(最大 50%)が欲しければ、S-estimator(Rousseeuw 1984)、MM-estimator、LMS(least median of squares)、LTS(least trimmed squares)など、より強力なロバスト推定量を使います。Huber 回帰は「外れ値割合が 10〜20% 程度までで、設計行列に高レバレッジ点がない」状況に最適です。

実世界での応用

CFD/FEM 残差解析:解析結果の残差ベクトルから収束傾向の slope を推定する場面で、解析の不安定領域(衝撃波、特異点近傍)が外れ値として混入します。OLS で収束 slope を見ると数値振動の 1 ステップで判定が反転しますが、Huber 回帰なら安定した収束履歴を抽出でき、自動的に「収束した/未収束」を判別する CI/自動メッシュ最適化ループに使えます。

センサー較正・キャリブレーション:圧力センサーや加速度センサーの線形性検定で、サンプル数 1000 点中に冷起動時のスパイク・電源ノイズが 1〜5% 混ざることがあります。校正係数(slope と intercept)を OLS で求めると公差を外れますが、Huber 回帰なら自動的にスパイクを抑制でき、JIS Z 8103 の不確かさ評価で問題なくクリアできます。

画像処理・コンピュータビジョン:RANSAC や Hough 変換と並ぶロバスト推定の選択肢として、エッジ検出後の直線フィッティング、点群からの平面・球面当てはめ、ステレオビジョンの基礎行列推定に使われます。OpenCV の cv::fitLine は DIST_HUBER オプションで Huber 推定を呼べます。RANSAC ほど計算コストが高くないので、リアルタイム処理に向きます。

金融時系列・リスク管理:ボラティリティ推定や CAPM β の推定で、リーマンショックやコロナ禍のようなテイルイベントが入った時に OLS の β は誤って大きくなります。Huber 回帰や Tukey biweight 回帰を使うと、「平常時の β」を分離して推定でき、ストレステストとの組み合わせで使い分けます。Bloomberg や FactSet の機関投資家向けデータでも、ロバスト β はオプションで配信されます。

よくある誤解と注意点

まず最大の落とし穴が、「Huber 回帰は崩壊点が高い」という誤解です。Huber M-estimator の崩壊点は厳密に 0%(漸近的に 1/n→0)で、十分大きな外れ値が 1 個でもあると推定を任意の値に飛ばせます。これは「影響関数 ψ_δ は有界(|ψ|≤δ)だが、高レバレッジ点(x が極端な点)に置かれた外れ値の影響は無視できない」からです。設計行列にてこ比の大きい点がある場合、Huber では不十分で、LTS(least trimmed squares)や MM-estimator のような崩壊点 50% 手法に切り替える必要があります。本ツールは設計点 x を一様分布と仮定しているため、レバレッジ問題は明示的には現れません。

次に、「δ をデータから推定し忘れる」こと。δ=1.345 は「σ=1」のときの値で、実データではまず残差スケール σ を MAD(中央絶対偏差)から σ̂=MAD/0.6745 で頑健に推定し、δ = 1.345·σ̂ とスケール合わせします。これを忘れて固定値 δ=1.345 を生データ(例えば residual の σ が 1000 のスケール)にそのまま当てると、ほぼ全データが外れ値扱いされ、Huber が LAD と同じ振る舞いをして効率が 64% まで落ちます。scikit-learn の HuberRegressor は内部で scale を同時推定するため安心ですが、自前実装するときは IRLS(iteratively reweighted least squares)の各反復で σ̂ を更新する Huber Proposal 2 を使ってください。

最後に、「Huber 回帰は外れ値を自動的に検出してくれる」という期待。Huber は「外れ値を割り引いて推定する」ことはしますが、「どの点が外れ値か」というラベルを返すわけではありません。外れ値検出(anomaly detection)が目的なら、Huber 回帰の残差に対して 3σ ルール、IQR ルール、あるいは Isolation Forest や LOF などの別手法を組み合わせます。実務でよくあるのが「Huber でフィット → 残差/scale が 2.5 を超える点を外れ値としてフラグ」というハイブリッドで、これなら推定の頑健性と外れ値検出を両立できます。

使い方ガイド

  1. サンプル数(numSamplesHR)を設定します。典型的には100~1000個のデータポイントを生成します
  2. Huberの閾値k(deltaHuber)を0.5~3.0の範囲で指定します。k=1.345は標準正規分布で95%の効率を実現します
  3. 外れ値の割合(outlierFractionHR)と外れ値の大きさ(outlierMagnitude)を設定し、OLS推定傾きとHuber推定傾きの差異を観察します
  4. 漸近相対効率(ARE)を確認し、ロバスト推定量の統計的効率を検証します

具体的な計算例

n=500、真の傾き=2.0、Huberの閾値k=1.345の設定で、外れ値割合10%、外れ値の大きさ5倍の場合:OLS推定傾きは1.62(バイアス=-0.38)、Huber推定傾きは1.98(バイアス=-0.02)となります。鋼製門型ラーメンの応力分布計測データで外れ値が混在した場合、OLSのバイアスは38%に達しますが、Huber回帰では2%以下に抑制されます。ARE値は約0.88で、正常データ下での効率損失は軽微です。

実務での注意点