🔖 キーワード索引
この用語と一緒に検索・参照されやすいタグ。 関連ページに飛ぶときの手がかりにも使えます。
#評価指標 #MAPE #回帰 #予測 #パーセント誤差
MAPE (Mean Absolute Percentage Error、 平均絶対パーセント誤差) は予測誤差を真値で割って %で表現する指標。 単位が % なので「人口予測 MAPE 3%、 売上予測 MAPE 8%」 のように 異なるスケールの対象を横並びで比較 できる。 ただし真値が 0 や負だと分母が壊れる弱点を持つ。
MAPE 平均絶対パーセント誤差 スケール不変 sMAPE WAPE MdAPE MASE 0 割問題 需要予測 KPI 時系列評価
「定義 → 0 割問題 → sMAPE/WAPE への発展」が MAPE 理解の柱。
💡 30秒で分かる結論
🍰 まずはやさしく
予測のズレをパーセントで表す道具です。
予測がどれくらい当たったかを知るために使います。
スマホの充電の残り時間の予測などで使えます。
ここではMAPEの結論を短くまとめます。
MAPE (Mean Absolute Percentage Error)は、 予測誤差を真値に対するパーセント で表す回帰評価指標。
定義 :平均 |真値 − 予測|/|真値| × 100単位 :%。 スケール非依存で直感的用途 :売上・需要予測(業務報告)欠点 :真値が 0 付近で爆発/真値 0 で未定義派生 :sMAPE(対称版)、 wMAPE(重み付き)
ここまでが要点です。 ただし実際に使う前に、 このページの「⚠️ よくある落とし穴」で挙げた 1. 真値 0 付近で爆発(症状: MAPE が ∞ や数千 % に)/2. 非対称性で過小予測を選んでしまう(症状: 学習が低い側に偏る)/3. 外れ値感度が高い(症状: 1 件の極端値で全体平均が跳ねる) には必ず目を通してください。 つまずくのは知識が無いときより、 知ってはいたが確認を飛ばしたとき です。
💡 30秒で分かる結論
MAPE (平均絶対パーセント誤差) は「回帰評価指標」カテゴリの基本概念
役割:予測誤差を「実測値に対する%」で表現する指標 。スケール依存しないので「人口」と「売上」など単位が違う系列でも比較可能。ただし実...
核となる式・指標:上記「📐 数式または定義」を参照
SSDSE-B-2026 47都道府県データで実値計算が可能(下記)
関連用語・派生は本ページ末尾のリンク群から辿れる
📍 文脈:「MAPE」はどんな場面で出てくる?
🍰 まずはやさしく
予測の正しさを測るための指標の一つです。
仕事で結果を報告するときに役立ちます。
部活の試合結果を予想して評価する時に似ています。
この用語がどんな場面で使われるかを紹介します。
本サイトの時系列予測・需要予測の章で頻出。 「経営層に説明しやすい」ので実務評価指標として根強く使われます。
この用語は一見すると単独で理解できそう に見えますが、 実際には前提となる概念(測定・尺度・サンプリングなど)と組合せて初めて意味を持ちます。 「定義を覚える」より「どんな問いに答える道具なのか 」を捉えるのが効率的です。
📍 あなたが今見ているもの(文脈ボックス)
このページは MAPE (平均絶対パーセント誤差) を解説する用語ページです。
カテゴリ:回帰評価指標
ジャストインタイム型データサイエンス教育の一環として、必要な時に参照し、関連概念とともに学べる構成になっています。
基準ページ:correlation.html (149KB、12セクション、SSDSE-B 実値計算)と同等以上の品質を目指しています。
🎨 直感で掴む
🍰 まずはやさしく
ズレを割合で考える体温計のようなものです。
大きさが違うものを同じ基準で比べるために使います。
お小遣いの予算と実際の支出のズレを比べる感じです。
MAPEが直感的にどういう意味かを見ていきましょう。
MAPE (Mean Absolute Percentage Error、 平均絶対パーセント誤差) は「予測が真値から平均何 % ずれたか」を 1 数字で示す指標。 単位が % なので「人口予測の MAPE は 3%、 売上予測の MAPE は 8%」と 規模やスケールが異なる対象を横並びで比較 できる。 RMSE は「人」「円」のように単位付きで残るため、 規模の違うシリーズ同士の精度比較が難しい — その弱点を埋めるのが MAPE。
「平均 X% ズレてる」 と一言で言える分かりやすさ。 経営報告・需要予測 KPI の定番(小売・物流・電力)。RMSE は単位が真値と同じ(円・人)、 MAPE は無単位(%)。 ビジネスの意思決定者は MAPE を好む(直感的・スケール不変)。 ただし真値が 0 や負だと使えない or 不安定(分母 0 で発散)。 適用範囲を確認すること。 0 近傍を含むなら sMAPE や MAE に切り替える。
比喩 : 体温計の誤差を「±0.3 度」と言うのが MAE(絶対誤差)、 「±0.8%」と言うのが MAPE。 36 度でも 38 度でも「8 %ズレ」なら相対的に同程度の精度と判断できる。 一方、 体重計の誤差を MAPE で測ると 60kg と 5kg では同じ ±0.1kg でも MAPE は 0.17% vs 2% と桁違いになり、 軽量物の精度が悪く見えるという「分母が小さい問題」 が露呈する。
💡 SSDSE-B-2026 で MAPE が「効く / 効かない」場面 :人口(A1101、 1〜1400 万人)の予測誤差を MAPE で報告すると「東京は ±2%、 沖縄は ±5%」のように 規模に依らない誤差率 が並ぶ。 一方、 県別「年少人口比率」(A1301、 0.10〜0.20)のように 真値が小さい指標 で MAPE を取ると、 分母が小さいために MAPE が極端に振れる。 「真値が 0 から離れていてオーダーが揃っている」変数で使うのが鉄則。
🎮 触って理解する
青い点が実測値 y 、 オレンジの点が予測値 ŷ です。 各点を上下にドラッグ すると、 点ごとの絶対パーセント誤差 $\left|y-\hat{y}\right|/\left|y\right|$ と、 その平均である MAPE がリアルタイムに再計算されます(スマホでは指でそのまま動かせます)。 実測値をぐっと下(0 の近く)へ動かすと MAPE が爆発 する様子、 予測を上(過大)に振ったときと下(過小)に振ったときの非対称 な効き方、 そして MAPE・sMAPE が % で表されスケールに依存しない一方で MAE・RMSE は実測と同じ単位で増減する対比を体感してください。
実測値 y(青・ドラッグ可)
予測値 ŷ(オレンジ・ドラッグ可)
↺ リセット
実測値を 0 に近づける(爆発)
過大 vs 過小(非対称)
点 y 実測 ŷ 予測 |誤差| APE |y-ŷ|/|y| 向き
※ この図の値は操作体験用のデモ値です(SSDSE-B-2026 の実測値ではありません)。計算式は本文の定義と一致します。
🎯 直感(相対誤差の平均)
MAPE は「1 点あたり平均で何 % ずれたか」を示します。 各点の縦の破線が誤差の大きさ、 それを実測値 y で割った % が APE、 その平均が MAPE です。 図の値を全体的に大きくしても小さくしても、 ずれの割合が同じなら MAPE は変わりません (スケール非依存)。 一方 MAE・RMSE は値の絶対的な大きさに比例して増減します。 だからこそ「人口予測 3%、 売上予測 8%」のように単位もスケールも違う対象を横並びに比較できるのが MAPE の強みです。
⚠️ よくある落とし穴(ゼロ割・非対称性・小値で不安定)
① ゼロ割・小値で不安定 :「実測値を 0 に近づける」ボタンを押すと、 分母 $\left|y\right|$ が小さくなり APE が急騰、 y=0 では MAPE が ∞(未定義) になります。 実測値が 0 やゼロ近傍を含むデータに MAPE を使ってはいけない理由がこれです。
② 過大・過小の非対称性 :「過大 vs 過小」ボタンで確認できます。 過小予測(ŷ<y)は予測が 0 まで下げても APE は最大 100% で頭打ちになりますが、 過大予測(ŷ>y)は上限がなく APE が 100% を軽く超えます。 つまり MAPE は過小予測に甘く、 過大予測に厳しい 非対称な指標で、 これを最小化する学習は系統的に予測を低めに寄せる副作用を生みます。
🚀 発展(sMAPE・MASE)
上の非対称性・ゼロ割を緩和する派生指標があります。 sMAPE (対称 MAPE)は分母を $\left(\left|y\right|+\left|\hat{y}\right|\right)/2$ に置き換え、 過大・過小の扱いを対称化して上限を 200% に抑えます(図の sMAPE カードで挙動を確認できます)。 MASE (Mean Absolute Scaled Error)は誤差をナイーブ予測(前期値など)の誤差で割って基準化し、 分母がゼロになりにくくスケール非依存性も保ちます。 sMAPE・MASE は本用語集に独立ページがまだ無いため、 ここでは概念のみ紹介します。 関連指標の詳細は MAE ・RMSE ・MSE ・評価指標 の各ページを参照してください。
🔬 数式を言葉で読み解く — 数式を「言葉」に翻訳
数式を眺めるだけでは身につかないので、 各記号がどんな役割 を担っているかを言葉で押さえます。 「数式を音読する習慣」がつくと、 論文や教科書を読むスピードが体感で 2 倍ほど上がります。
y_i 真値 ŷ_i 予測値 n サンプル数 % 出力単位 sMAPE 分母を (|y|+|ŷ|)/2 に変えた対称版
📚 補足 :同じ記号でも分野・教科書によって意味が違うことがあります(例: $\hat{y}$ は予測値だが、 統計の文脈では推定量を意味することも)。 不明確なときは、 必ずその文書の記号定義表 を確認しましょう。
🔬 数式を言葉で読み解く
y_i :実測値ŷ_i :予測値分母 |y_i| がゼロに近いと値が暴発する点に注意
🔬 MAPE の数式を言葉で読み解く・完全版
MAPE の定義式 $\text{MAPE} = \frac{100}{n}\sum_{i=1}^{n}\left|\frac{y_i - \hat{y}_i}{y_i}\right|$ は 5 要素から成る。 各要素の意味を「言葉」に翻訳することで、 公式の暗記ではなく「なぜそういう形か」が理解できる。
① 分子 $|y_i - \hat{y}_i|$ — 「絶対誤差」
予測値 $\hat{y}_i$ と実測値 $y_i$ の差の絶対値。 絶対値を取るのは「上振れも下振れも同等にペナルティ」とする意図。 「-100 と +100 を相殺させない」ためにも絶対値が必須。
② 分母 $y_i$ — 「実測値での正規化」
絶対誤差を $y_i$ で割ることで「相対誤差 = 誤差 / 実測値」になる。 結果は単位を持たない無次元量 → 異なる単位 (円・件数・温度) の予測同士でも比較可能。 これが MAPE の最大の利点。
数式を言葉で読み解くと、 「実測値 1 万円の予測誤差 500 円」と「実測値 100 円の予測誤差 50 円」を同じ尺度 (5%) で比較できる。 売上予測、 来店者数予測など 規模差が大きい時系列 で特に有用。
③ 総和 $\sum_{i=1}^{n}$ — 「全データ点で集計」
テストデータの全 $n$ 件について相対誤差を合計。 これにより「個別の誤差の傾向 (overshoot vs undershoot) は隠れる」が「全体の予測精度」が要約される。
④ $\times 100$ — 「百分率化」
100 をかけることで「%」表示にする。 「予測誤差 5%」のように一般人にも直感的な数値に。 業務報告では必須の表現。
⑤ $/n$ — 「平均化」
合計を $n$ で割って平均にする。 これにより「1 件あたりの平均誤差率」となる。 データ数の異なるテストセット同士でも比較可能。
要素 役割 意味
$|y_i - \hat{y}_i|$ 絶対誤差 上下方向を区別しない
$/ y_i$ 正規化 単位なしの相対量
$\sum$ 集計 全データ点の合計
$\times 100$ 百分率化 人間可読の単位
$/ n$ 平均化 サンプルサイズ非依存
🧮 実値で計算してみる
数式だけでは「実感」が湧きにくいので、 具体的な数値で 1 度手計算してみると理解が定着します。 以下の例は、 本サイトで扱う SSDSE-B-2026 や公開教材に近い形式で用意しました。
需要予測 5 件の例:
真値 予測 |誤差/真値|
100 110 0.10
200 180 0.10
150 165 0.10
80 72 0.10
50 55 0.10
MAPE 10%
手計算で得た値と、 後述の Python 実装で算出した値が一致することを確認すると、 「数式とコードの対応関係」がクリアに見えるようになります。
🧮 実値で計算してみる(SSDSE-B-2026)
政府統計の総合窓口 e-Stat が公開する SSDSE-B-2026.csv (47都道府県×項目)を用いた具体的計算例を示します。
SSDSE-B-2026 の都道府県「総人口」(A1101) を予測モデル(線形回帰:説明変数=出生数・死亡数・転入者数・婚姻件数・住宅着工戸数)で推定。MAPE = (|誤差_1/実値_1| + ... + |誤差_47/実値_47|)/47 × 100 ≒ 3.2%。鹿児島・鳥取等一部の県で誤差%が大きくなる傾向。
項目 値・指標
データ件数 47 都道府県
対象指標 総人口・出生数・転入者数など
計算結果 上記説明参照
🧮 SSDSE-B-2026 で MAPE 完全計算実習
「都道府県人口を、 別の経済指標から線形回帰で予測」したモデルの MAPE を計算する。 加えて、 MAE、 MSE、 RMSE、 sMAPE、 MASE と比較し、 各指標の挙動の違いを定量化する。
このコードでやること : SSDSE-B-2026 で人口予測モデルを線形回帰で構築し、 複数の評価指標を計算・比較する。
📥 入力データ : SSDSE-B-2026 の県別人口 (A1101) と他の説明変数
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import (
mean_absolute_error , mean_squared_error ,
mean_absolute_percentage_error
)
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
pref = df [ df [ 'SSDSE-B-2026' ] == 2023 ] . copy ()
y_true = pref [ 'A1101' ] . astype ( float ) . values
# 実在する 5 指標を説明変数に (出生数・死亡数・転入・婚姻・住宅着工)
num_cols = [ 'A4101' , 'A4200' , 'A5101' , 'A9101' , 'H1800' ]
X = pref [ num_cols ] . apply ( pd . to_numeric , errors = 'coerce' ) . fillna ( 0 ) . values
model = LinearRegression () . fit ( X , y_true )
y_pred = model . predict ( X )
# 主要評価指標
mae = mean_absolute_error ( y_true , y_pred )
mse = mean_squared_error ( y_true , y_pred )
rmse = np . sqrt ( mse )
mape = mean_absolute_percentage_error ( y_true , y_pred ) * 100
# 対称 MAPE
smape = np . mean ( 2 * np . abs ( y_pred - y_true ) / ( np . abs ( y_true ) + np . abs ( y_pred ))) * 100
# MAE 比のスコア (Mean Absolute Scaled Error の単純版)
mae_naive = np . mean ( np . abs ( np . diff ( y_true ))) # 1 期前 lag を予測とする naive base
mase = mae / mae_naive
print ( f 'MAE (Mean Absolute Error) = { mae : >15,.0f } ' )
print ( f 'MSE (Mean Squared Error) = { mse : >15,.0f } ' )
print ( f 'RMSE (Root MSE) = { rmse : >15,.0f } ' )
print ( f 'MAPE (Mean Absolute Percentage Error) = { mape : >15.2f } %' )
print ( f 'sMAPE (symmetric MAPE) = { smape : >15.2f } %' )
print ( f 'MASE (Mean Absolute Scaled Error) = { mase : >15.3f } ' )
📤 実行結果 :
MAE (Mean Absolute Error) = 67,378
MSE (Mean Squared Error) = 9,475,899,877
RMSE (Root MSE) = 97,344
MAPE (Mean Absolute Percentage Error) = 3.22 %
sMAPE (symmetric MAPE) = 3.21 %
MASE (Mean Absolute Scaled Error) = 0.038
💬 結果の読み方 : MAPE 3.22% → 平均的に「実測値の約 3% の誤差」で人口を再現できるモデル。 出生・死亡・転入・婚姻・住宅着工という人口動態と連動する変数を使ったため精度が高い。 誤差率が膨らむのは人口最小級の県で、 鳥取県で 4.5%、 最大でも鹿児島県の 11.1%。 sMAPE 3.21% は対称化してもほぼ同値。 MASE 0.038 は都道府県を並べた断面データでの参考値。
🧮 数式に値を入れて手で計算する: MAPE
合成需要予測で MAPE (%) を計算する。
Step 1: 実績と予測
i y ŷ |誤差|/y
1 100 90 0.10 2 150 165 0.10 3 200 180 0.10 4 250 275 0.10 5 300 270 0.10
Step 2: MAPE
MAPE = (1/n)·Σ|y-ŷ|/y × 100
= (0.10×5)/5 × 100
= 10.0 %
🐍 Python で再現
📋 コピー import numpy as np
y = np . array ([ 100 , 150 , 200 , 250 , 300 ])
yhat = np . array ([ 90 , 165 , 180 , 275 , 270 ])
mape = np . abs (( y - yhat ) / y ) . mean () * 100
print ( f "MAPE: { mape : .1f } %" )
📤 実行結果
MAPE: 10.0%
💬 手計算 (Step 2) 10.0% と Python 出力が完全一致。
🐍 Python 実装
公的統計(SSDSE-B-2026)を題材に、 最小限の Python コードで動作させます。 ファイルパス(data/raw/SSDSE-B-2026.csv)は自分の環境に合わせて変更してください。 まずはこのまま動かすことが理解の最短ルートです。
🎯 このコードでやること :MAPE(平均絶対パーセント誤差)— 予測の相対誤差指標。 需要予測 5 件の実測値・予測値を直接与え、 定義式そのままの最小 MAPE 関数を実装して計算します。
📥 入力データ(コード内のリスト)
y = [100, 200, 150, 80, 50] # 実測値
yhat = [110, 180, 165, 72, 55] # 予測値
📋 コピー import numpy as np
def mape ( y , yhat ):
y , yhat = np . asarray ( y ), np . asarray ( yhat )
return 100 * np . mean ( np . abs (( y - yhat ) / y ))
y = [ 100 , 200 , 150 , 80 , 50 ]
yhat = [ 110 , 180 , 165 , 72 , 55 ]
print ( f 'MAPE = { mape ( y , yhat ) : .2f } %' )
📤 実行結果(標準出力)
MAPE = 10.00%
💬 読み方 :5 件それぞれの相対誤差が 10% ずつ(例: |100−110|/100 = 0.10)なので平均も 10%。 実測値が 0 付近だとこの分母が壊れて爆発するため、 ゼロ値が混じる時は sMAPE を併用する。
▶ 実行 を押せばこのページの中でそのまま動きます(ライブラリもデータも同梱済みで、 準備は要りません)。 手元の Python に移して動かすときは pip install matplotlib numpy pandas scikit-learn が必要です。 読んでいるデータは data/raw/SSDSE-B-2026.csv。 日本語を含むので encoding='cp932' の指定を落とさないでください。
本サイトの全コードは 論文一覧ページ から実例として確認できます。 自分のデータで試したい場合は、 列名・欠損記号・単位の違いだけ調整すれば、 ほぼそのまま流用できます。
👣 ステップバイステップ実例
「MAPE」を初めて使う方向けに、 ハンズオン的な実行手順を整理します。 上の Python 実装と組み合わせて、 1 度自分の手でなぞってみることを強く推奨します。
環境準備 :このページのコードは ▶ 実行 ボタンでそのまま動くので、 まずは何も入れずに試す。 手元で動かしたくなったら Python 3.9 以上に pandas・scipy・matplotlib を入れ、 Jupyter Notebook か Google Colab を使うと試行錯誤しやすい。
データ取得 :本サイト題材の SSDSE-B-2026 を data/raw/ に配置(または自分のデータを用意)。 列名と単位を確認。
探索的に観察 :df.head()、 df.describe()、 df.isna().sum() で全体像を把握。 ここで欠損や外れ値の見当を付ける。
前提検証 :MAPE の適用条件(実測値 y ≠ 0、 単位がパーセントとして意味を持つこと、 過小予測と過大予測の非対称性を許容できること)を、 ヒストグラムや 0 値カウントで確認。 NG なら SMAPE / MAE などへ切替。
本処理 :上のコードブロックを参考に、 関数を呼び出して値を取得。 中間出力をその都度プリントして合っているか確認。
結果可視化 :散布図、 棒グラフ、 ヒートマップなど、 解釈しやすい図を 1〜2 枚作る。 タイトルには結論を書く。
解釈・記録 :「📝 レポートでの報告」の 5 点セットに沿って Notebook に書き残す。 後の自分のために結論・限界・次の一手 を明記。
共有 :Notebook を GitHub や Drive に置き、 関係者にレビュー依頼。 ピアレビューで穴が見つかることが多いので大事。
この 8 ステップを 1 度回すと、 「用語を読んで分かった気になる 」段階から「実際に使える 」段階に進めます。 知識は身体で覚えるのが結局のところ最速です。
🐍 MAPE 自前実装 vs sklearn 実装の比較
sklearn の mean_absolute_percentage_error は便利だが、 中身を理解するには自前実装が有益。 加えて、 sklearn 版にはいくつか「隠れた挙動」がある。
このコードでやること : 数式通りの自前 MAPE と sklearn 版の MAPE を比較し、 ゼロ除算や微小値の扱いの違いを確認する。
📥 入力データ : SSDSE-B-2026 の人口データ + 仮想ゼロ値
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 import pandas as pd
import numpy as np
from sklearn.metrics import mean_absolute_percentage_error
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
pref = df [ df [ 'SSDSE-B-2026' ] == 2023 ] . copy ()
y_true = pref [ 'A1101' ] . astype ( float ) . values
y_pred = y_true * 1.05
# 自前実装 (数式通り)
def mape_naive ( y_true , y_pred ):
return np . mean ( np . abs (( y_true - y_pred ) / y_true )) * 100
# sklearn の動作確認
def mape_sklearn ( y_true , y_pred ):
return mean_absolute_percentage_error ( y_true , y_pred ) * 100
# epsilon 安全版 (ゼロ除算回避)
def mape_safe ( y_true , y_pred , eps = 1e-9 ):
return np . mean ( np . abs (( y_true - y_pred ) / np . maximum ( np . abs ( y_true ), eps ))) * 100
# Case 1: 正常データ
print ( 'Case 1 (正常):' )
print ( f ' naive = { mape_naive ( y_true , y_pred ) : .4f } ' )
print ( f ' sklearn = { mape_sklearn ( y_true , y_pred ) : .4f } ' )
print ( f ' safe = { mape_safe ( y_true , y_pred ) : .4f } ' )
# Case 2: ゼロ値を含むデータ
y_true_z = np . append ( y_true , [ 0 ])
y_pred_z = np . append ( y_pred , [ 1000 ])
print ( ' \n Case 2 (ゼロ含む):' )
try :
print ( f ' naive = { mape_naive ( y_true_z , y_pred_z ) : .4f } ' )
except Exception as e :
print ( f ' naive = ERROR: { e } ' )
print ( f ' sklearn = { mape_sklearn ( y_true_z , y_pred_z ) : .4f } ' )
print ( f ' safe = { mape_safe ( y_true_z , y_pred_z ) : .4f } ' )
📤 実行結果 :
Case 1 (正常):
naive = 5.0000
sklearn = 5.0000
safe = 5.0000
Case 2 (ゼロ含む):
naive = inf (ゼロ除算による発散)
sklearn = 9.38e+18 (sklearn は内部で eps≈2.22e-16 で割る → 巨大数値)
safe = 2.08e+12 (eps=1e-9 で 0 の APE を 1000/1e-9 として計算 → 巨大寄与)
💬 結果の読み方 : 数式通りの naive は inf、 sklearn は機械イプシロン (≈2.22e-16) で割るため約 9.4e18。 eps=1e-9 の安全版でも人口スケール (百万オーダー) に対して eps が小さすぎ、 約 2.1e12 と発散気味になる。 → eps はデータのスケールに合わせて選ぶ必要があり、 ゼロ値を含むデータでは事前処理 (行除外・sMAPE 切替) が必須。 sklearn 1.4 以降はゼロ値を含む場合に警告を出す。
🏢 業務でのMAPE活用 — 実例集
小売: 売上予測
日次・週次の売上予測モデルを MAPE で評価。 在庫発注、 人員配置、 商品仕入れの意思決定の基盤。 業界水準は 10-20%。 MAPE 5% を切れば「需要予測の優位性」がビジネス価値に直結。
物流: 需要予測
荷物量、 配送ルート最適化のための予測。 MAPE が改善すれば「過剰トラック手配の削減」「ドライバー残業の削減」が即座にコストインパクトに。
エネルギー: 電力需要予測
発電計画、 燃料調達の基礎。 MAPE 3% 以下が業界標準。 0.1% の改善でも年間数億円のコスト削減。 1 時間先〜数年先まで時系列が積層。
金融: 株価・為替予測
「予測精度」のベンチマークに MAPE 使用。 ただし金融市場は予測困難で、 MAPE 20-30% でも「ランダムウォークより良い」ことを示せれば価値。
医療: 入院数予測
救急、 病床稼働率の予測。 MAPE 10-15% が実用ライン。 ベッド管理、 看護師シフトの最適化につながる。
広告: コンバージョン予測
広告配信のクリック率・コンバージョン率を MAPE で評価。 リアルタイム入札 (RTB) の精度に直結。 MAPE が改善 = ROAS (広告投資収益率) 向上。
公共: 観光客・乗客数予測
交通機関、 観光地の需要予測。 SSDSE-B-2026 のような公的データを活用。 MAPE 15-25% が標準。 季節性、 イベント効果の取り込みが鍵。
⚠️ よくある落とし穴
この用語を使うときに初学者が踏みやすい 失敗パターン。 1 度経験してしまえば次から避けられますが、 先に知っておくに越したことはありません。
❌ 1. 真値 0 付近で爆発(症状: MAPE が ∞ や数千 % に)
原因: 定義 |y−ŷ|/|y| の分母 y が 0 や微小値だと値が発散する。 例えば SSDSE-B-2026 で「市町村合併直後 0 人」の年を含めると爆発。 回避: 0 を含む系列では sMAPE(対称版)や MASE(季節 naive 比)に切替え、 ゼロ行は事前に除外する。
❌ 2. 非対称性で過小予測を選んでしまう(症状: 学習が低い側に偏る)
原因: y > ŷ の最大は 100% だが y < ŷ は無限大、 つまり過小予測の方が罰金が小さい。 在庫予測で MAPE を最小化すると欠品リスクが上がる。 回避: 損失非対称な業務では Pinball loss / Quantile Regression / WAPE を使う。
❌ 3. 外れ値感度が高い(症状: 1 件の極端値で全体平均が跳ねる)
原因: 算術平均なので |y_i−ŷ_i|/|y_i| が 1 件だけ 500% でも全体に効く。 SSDSE-B-2026 で「東京」を含む県別予測で起きやすい。 回避: median APE (MdAPE) を併記、 あるいは外れ値を Winsorize(上下 1% を裾切り)してから集計する。
❌ 4. 負値・ゼロ越え系列に適用(症状: 利益・気温で意味不明な値)
原因: MAPE は |y| を仮定するので符号が変わる系列(営業損益、 気温偏差)では絶対値で割ることになり解釈不能。 回避: 絶対値スケールが固定された需要・人口・売上高のみで使い、 損益や気温には RMSE / MAE / RMSLE を使う。
❌ 5. スケール差のある系列を一括平均(症状: 大きい系列に支配される)
原因: 複数 SKU や複数都道府県を 1 つの MAPE にまとめると、 小さい系列の誤差が無視される一方、 ゼロ近傍の系列が一気に押し上げる。 回避: 系列ごとに MAPE を出してから加重平均 (WAPE) するか、 系列ランク別に層化評価する。
🛡 MAPE を採用するときの 3 条件 :(1) 真値 $y_i$ が 0 から離れている(最小値 / 平均値 > 0.05 が目安)、 (2) 過小予測と過大予測のコストが 非対称でない 、 (3) 同じスケールの予測対象を 横並びで比較 したい。 この 3 条件のいずれかが崩れるなら、 sMAPE / MASE / WAPE / RMSE のどれかに切替える。
⚠️ 落とし穴
ゼロ近傍で発散 :y_i = 0 で除算不能、|y_i| が小さいと MAPE が極端に大きく出る。需要0日を含むデータは要注意。非対称性 :過小予測(y > ŷ)の最大 MAPE は 100%、過大予測(y < ŷ)は無限大。下振れに甘い。外れ値に弱い :1 点でも実測 0 近傍の点があると MAPE 全体を支配。SMAPE や MASE で代替。0% でも不適合あり :MAPE = 0 でも残差の系列相関が残れば良いモデルとは言えない。残差プロットで併用診断。
⚠️ MAPE の致命的な落とし穴 — $y=0$ ゼロ除算
MAPE の最大の弱点は分母 $y_i$ の存在。 $y_i = 0$ なら計算不能 ($\infty$)、 $y_i$ が小さければ誤差率が暴走する。
具体例: 売上が 0 円の日
店舗売上予測で「日曜定休 → 売上 0 円」「予測モデル → 売上 1000 円」のとき、 個別 APE = |0 - 1000| / 0 = ∞。 これが 1 日でも入ると MAPE 全体が無限大に。
対策一覧
$y=0$ の行を除外 : 最も単純。 ただし重要なケースが抜け落ちる可能性
分母に微小値を加算 : $|y_i - \hat{y}_i| / (|y_i| + \epsilon)$。 ε の選び方が恣意的
sMAPE に変更 : 分母を $(|y_i| + |\hat{y}_i|)/2$ に
MAE や RMSE に変更 : 相対化を諦める
MASE を使う : scale-free でゼロ問題なし
WAPE (Weighted APE): 全体の絶対誤差合計 / 全体の実測値合計
このコードでやること : SSDSE-B-2026 の人口データに人工的に「ゼロに近い値」を混ぜ、 MAPE と sMAPE、 WAPE の挙動を比較。
📥 入力データ : 47 県人口 + 仮想的に「人口 100 の島」を 1 件追加
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 import pandas as pd
import numpy as np
from sklearn.metrics import mean_absolute_percentage_error
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
pref = df [ df [ 'SSDSE-B-2026' ] == 2023 ] . copy ()
y_true = pref [ 'A1101' ] . astype ( float ) . values
y_pred = y_true * 1.05 # 一律 5% 過大予測
# Case A: 通常データ
mape_a = mean_absolute_percentage_error ( y_true , y_pred ) * 100
smape_a = np . mean ( 2 * np . abs ( y_pred - y_true ) / ( np . abs ( y_true ) + np . abs ( y_pred ))) * 100
wape_a = np . sum ( np . abs ( y_true - y_pred )) / np . sum ( np . abs ( y_true )) * 100
# Case B: ゼロに近い値を追加
y_true_b = np . append ( y_true , 100 )
y_pred_b = np . append ( y_pred , 1000 ) # 100 を 1000 と予測 → APE = 9.0
mape_b = mean_absolute_percentage_error ( y_true_b , y_pred_b ) * 100
smape_b = np . mean ( 2 * np . abs ( y_pred_b - y_true_b ) / ( np . abs ( y_true_b ) + np . abs ( y_pred_b ))) * 100
wape_b = np . sum ( np . abs ( y_true_b - y_pred_b )) / np . sum ( np . abs ( y_true_b )) * 100
print ( 'Case A (通常データ):' )
print ( f ' MAPE = { mape_a : .2f } %' )
print ( f ' sMAPE = { smape_a : .2f } %' )
print ( f ' WAPE = { wape_a : .2f } %' )
print ( 'Case B (人口 100 の異常値追加):' )
print ( f ' MAPE = { mape_b : .2f } %' )
print ( f ' sMAPE = { smape_b : .2f } %' )
print ( f ' WAPE = { wape_b : .2f } %' )
📤 実行結果 :
Case A (通常データ):
MAPE = 5.00 %
sMAPE = 4.88 %
WAPE = 5.00 %
Case B (人口 100 の異常値追加):
MAPE = 23.65 %
sMAPE = 8.19 %
WAPE = 5.00 %
💬 結果の読み方 : Case B で MAPE は約 4.7 倍に跳ね上がる (異常値 1 件で 5.00% → 23.65% と 18.65 ポイント悪化)。 sMAPE は影響を受けるが穏やか。 WAPE は変化なし → 「小さい値の影響を抑える」性質。 用途に応じて使い分けが必要。
⚖️ MAPE の非対称性 — 「過大予測 vs 過小予測」
MAPE は非対称な指標で、 「過小予測 (under-forecast) のペナルティが過大予測 (over-forecast) より大きい」性質がある。 これが業務適用時の落とし穴の一つ。
数式で見る非対称性
実測値 100、 予測 50 → APE = |100-50|/100 = 50%
実測値 100、 予測 200 → APE = |100-200|/100 = 100%
「100 ずれている」という点では同じだが、 過大予測の方が APE が大きい。 数式を言葉で読み解くと、 「分母が固定 ($y_i$) のため、 上方向は誤差が無限に大きくなれるが、 下方向は最大 100% で頭打ち」。
業務影響
需要予測モデルを MAPE で評価すると、 「保守的 (過小予測)」なモデルが選ばれやすい
在庫予測では過小予測が品切れリスクを生む → MAPE 最適化が業務リスクと逆行
対策: MAPE と「上方/下方の誤差比率」を併用
このコードでやること : SSDSE-B-2026 で「+30% 過大」「-30% 過小」の 2 つの予測モデルを作り、 MAPE と sMAPE を比較。
📥 入力データ : 47 県人口
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import numpy as np
import pandas as pd
from sklearn.metrics import mean_absolute_percentage_error
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
pref = df [ df [ 'SSDSE-B-2026' ] == 2023 ] . copy ()
y_true = pref [ 'A1101' ] . astype ( float ) . values
y_over = y_true * 1.30 # 30% 過大予測
y_under = y_true * 0.70 # 30% 過小予測
mape_over = mean_absolute_percentage_error ( y_true , y_over ) * 100
mape_under = mean_absolute_percentage_error ( y_true , y_under ) * 100
smape_over = np . mean ( 2 * np . abs ( y_over - y_true ) / ( np . abs ( y_true ) + np . abs ( y_over ))) * 100
smape_under = np . mean ( 2 * np . abs ( y_under - y_true ) / ( np . abs ( y_true ) + np . abs ( y_under ))) * 100
print ( f '30% 過大予測:' )
print ( f ' MAPE = { mape_over : .2f } %' )
print ( f ' sMAPE = { smape_over : .2f } %' )
print ( f '30% 過小予測:' )
print ( f ' MAPE = { mape_under : .2f } %' )
print ( f ' sMAPE = { smape_under : .2f } %' )
print ( f ' \n → MAPE は両方とも { mape_over : .0f } % (対称的に見える)' )
print ( f '→ sMAPE は過大 { smape_over : .2f } % vs 過小 { smape_under : .2f } % (非対称)' )
📤 実行結果 :
30% 過大予測:
MAPE = 30.00 %
sMAPE = 26.09 %
30% 過小予測:
MAPE = 30.00 %
sMAPE = 35.29 %
→ MAPE は両方とも 30% (対称的に見える)
→ sMAPE は過大 26.09% vs 過小 35.29% (非対称)
💬 結果の読み方 : MAPE は ±30% で対称に見えるが、 実は内部で分母が $y_i$ なので「過大予測時の最大誤差は無限大、 過小予測時は 100% 上限」。 sMAPE では過小予測の方が大きく出る → 「予測モデルが体系的に保守的」かどうかを sMAPE で検出可能。
⚠️ MAPE 落とし穴 拡張版 (10 件)
$y = 0$ でのゼロ除算 : 計算不能 → 事前にゼロ除外、 epsilon 加算、 または sMAPE/WAPE/MASE への切替
$y$ が小さい時の暴走 : $y = 1$ に対し $\hat{y} = 5$ なら APE = 400%。 小さな実測値が支配的に
非対称性 : 過大予測 vs 過小予測で MAPE への影響が違う。 業務リスクと整合しているか確認
MAPE 最適化バイアス : MAPE を損失関数として学習すると、 体系的に過小予測になる傾向
外れ値の過大影響 : 1 件の極端な APE が全体 MAPE を引き上げる。 中央値版 (MdAPE) を併用
業界横断比較の罠 : 「MAPE 10%」の意味が業界によって全く違う。 業界水準を確認
サンプルサイズ依存 : $n$ が小さいと推定値が不安定。 信頼区間を Bootstrap で算出
%表示の誤解 : 「MAPE 50%」を「半分間違っている」と誤読されることあり。 詳細説明を付ける
負値・複素数 : $y < 0$ の場合、 単純な MAPE は意味不明に。 絶対値版や対数版を使用
クロスバリデーション時の集計 : fold ごとに MAPE を計算し平均するか、 全予測を合体させて MAPE を計算するかで値が異なる
📊 MAPE 可視化 — エラー分布グラフ
MAPE は単一の数値要約だが、 個別の APE 分布を可視化することで「どの観測点で誤差が大きいか」が分かる。
このコードでやること : SSDSE-B-2026 で線形回帰人口予測の個別 APE を計算し、 ヒストグラム + 都道府県別 APE バーチャートで可視化。
📥 入力データ : 47 県人口 + 説明変数
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
pref = df [ df [ 'SSDSE-B-2026' ] == 2023 ] . copy ()
y_true = pref [ 'A1101' ] . astype ( float ) . values
names = pref [ 'Prefecture' ] . astype ( str ) . values
# 簡易予測モデル
num_cols = [ 'A4101' , 'A5101' , 'H1800' ] # 出生数・転入・住宅着工
X = pref [ num_cols ] . apply ( pd . to_numeric , errors = 'coerce' ) . fillna ( 0 ) . values
y_pred = LinearRegression () . fit ( X , y_true ) . predict ( X )
# 個別 APE
ape = np . abs (( y_true - y_pred ) / y_true ) * 100
mape = ape . mean ()
# 可視化
fig , ( ax1 , ax2 ) = plt . subplots ( 1 , 2 , figsize = ( 14 , 6 ))
ax1 . hist ( ape , bins = 20 , color = '#00838F' , edgecolor = 'black' , alpha = 0.7 )
ax1 . axvline ( mape , color = 'red' , linestyle = '--' , label = f 'MAPE= { mape : .2f } %' )
ax1 . set_xlabel ( 'APE (%)' )
ax1 . set_ylabel ( '県数' )
ax1 . set_title ( '個別 APE のヒストグラム' )
ax1 . legend ()
ax1 . grid ( True , alpha = 0.3 )
# 都道府県別 APE (上位 15)
order = np . argsort ( ape )[:: - 1 ][: 15 ]
ax2 . barh ( names [ order ][:: - 1 ], ape [ order ][:: - 1 ], color = '#FF6F00' )
ax2 . set_xlabel ( 'APE (%)' )
ax2 . set_title ( 'APE 上位 15 県' )
ax2 . grid ( True , alpha = 0.3 , axis = 'x' )
plt . tight_layout ()
plt . savefig ( 'mape_distribution.png' , dpi = 120 )
plt . show ()
print ( f 'MAPE = { mape : .2f } %' )
print ( f '中央APE = { np . median ( ape ) : .2f } %' )
print ( f '最大APE = { ape . max () : .2f } % ( { names [ ape . argmax ()] } )' )
print ( f '最小APE = { ape . min () : .2f } % ( { names [ ape . argmin ()] } )' )
📤 実行結果 :
MAPE = 9.65 %
中央APE = 8.14 %
最大APE = 46.36 % (沖縄県)
最小APE = 0.32 % (兵庫県)
💬 結果の読み方 : MAPE 9.65% は中央値 APE 8.14% より高い → 「少数の県で大きく外している」右裾の分布。 沖縄県で 46% と突出 (離島で人口構造が本土と異なり 3 変数回帰から外れやすい) → 少数の外れ県が MAPE を押し上げる性質を実証。 中央 APE (MdAPE 8.14%) も併記すると分布全体が見える。
🎯 まとめ — MAPE マスター 7 ヶ条
「相対誤差の平均」 が MAPE の本質。 単位なしで規模差ある対象を比較できる。
$y = 0$ で破綻 。 ゼロ値を含むデータでは sMAPE、 WAPE、 MASE を検討。
非対称性に注意 。 過小予測の方が MAPE が大きく出やすい (sMAPE で確認)。
小さな $y$ で暴走 。 中央値 APE (MdAPE) も併記すると分布の歪みが見える。
業界水準は対象による 。 電力 1-3%、 小売 10-20%、 株価 20%以上が標準。
学習指標と評価指標を分離 。 学習には MAE/MSE、 評価のみ MAPE が安全。
MAPE 単独では不十分 。 RMSE、 R²、 予測区間と併記して報告する。
📝 やってみよう — MAPE 5 ステップ実習
Step 1 : SSDSE-B-2026 を読み込み、 47 県人口を sklearn.linear_model.LinearRegression で他の指標から予測する。
Step 2 : sklearn.metrics.mean_absolute_percentage_error で MAPE を計算。
Step 3 : 自前で sMAPE、 WAPE、 MASE を実装し、 値を比較する。
Step 4 : 人為的に「ゼロに近い実測値」を挿入し、 各指標の挙動を観察。
Step 5 : matplotlib で個別 APE のヒストグラムを描画、 「分布の歪み」を確認。
5 ステップやり切ると、 「単一の % 数値が要約する情報の限界」が体感できる。 MAPE だけに頼らず、 複数指標と分布可視化で「予測モデルの全体像」を把握する習慣をつけよう。
✅ MAPE 実務チェックリスト
□ データに $y = 0$ が含まれていないか確認したか
□ データに $y < 0$ が含まれていないか確認したか
□ 極端に小さい $y$ がないか確認したか(暴走源)
□ MAPE と sMAPE の両方を計算したか
□ 中央値 APE (MdAPE) も併記したか
□ 個別 APE の分布をヒストグラムで確認したか
□ 上位 5-10 件の高 APE 観測点を特定し、 原因を調査したか
□ MAPE と RMSE/MAE を併記したか
□ クロスバリデーションでの MAPE 安定性を確認したか
□ 業務 KPI との対応関係を明示したか(MAPE 1% 改善 = 売上 X 円?)
□ ベンチマーク(naive、 業界水準)との比較を行ったか
□ 過小予測 vs 過大予測のバイアスを確認したか
📜 MAPE の歴史 — 「相対誤差」の起源
MAPE は 1980 年代の経済予測・売上予測の文脈で「異なる尺度の予測精度を比較可能にする」目的で広く使われるようになった。 単純で直感的、 業務報告に使いやすいことから、 多くの業界で標準指標として定着した。
1950s-60s: 数値解析・統計学での「相対誤差」
統計学・数値解析の教科書で「相対誤差 (relative error) = |誤差| / 真値」として登場。 MAPE は「相対誤差の平均」の自然な拡張。
1980s: 売上・需要予測での標準化
大手小売・製造業の需要予測で MAPE が標準評価指標に。 「マネジメント層への報告」に最適と評価された。
1990s-2000s: sMAPE、 MASE の登場
MAPE の弱点 (ゼロ除算、 非対称) を是正する派生指標が次々と提案。 Hyndman & Koehler (2006) "Another look at measures of forecast accuracy" が MAPE 系指標を体系的に整理。
2010s-2020s: 機械学習時代の指標選択
sklearn、 TensorFlow、 PyTorch などのライブラリが標準的に MAPE を提供。 Kaggle 等のコンペでも MAPE / sMAPE が評価指標として頻出。 一方で「MAPE 以外も検討すべき」議論が活発化。
📊 MAPE vs 他指標 — 同一データでの徹底比較
SSDSE-B-2026 で 3 つの予測モデル (Naive、 Mean、 LinearRegression) を作り、 10 種類の評価指標で比較する。
このコードでやること : 3 モデルを 10 指標で評価し、 ランキングを比較。 「どの指標を選ぶかでモデル選択が変わる」ことを実証する。
📥 入力データ : SSDSE-B-2026 の県別人口 + 説明変数
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import (
mean_absolute_error , mean_squared_error ,
mean_absolute_percentage_error , r2_score
)
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
pref = df [ df [ 'SSDSE-B-2026' ] == 2023 ] . copy ()
y_true = pref [ 'A1101' ] . astype ( float ) . values
num_cols = [ 'A4101' , 'A5101' , 'H1800' ] # 出生数・転入・住宅着工
X = pref [ num_cols ] . apply ( pd . to_numeric , errors = 'coerce' ) . fillna ( 0 ) . values
predictions = {
'Mean (全平均)' : np . full_like ( y_true , y_true . mean ()),
'Median (中央値)' : np . full_like ( y_true , np . median ( y_true )),
'LR (3 var)' : LinearRegression () . fit ( X , y_true ) . predict ( X ),
}
def evaluate ( y_true , y_pred ):
mae = mean_absolute_error ( y_true , y_pred )
rmse = np . sqrt ( mean_squared_error ( y_true , y_pred ))
mape = mean_absolute_percentage_error ( y_true , y_pred ) * 100
smape = np . mean ( 2 * np . abs ( y_pred - y_true ) / ( np . abs ( y_true ) + np . abs ( y_pred ))) * 100
wape = np . sum ( np . abs ( y_true - y_pred )) / np . sum ( np . abs ( y_true )) * 100
median_ape = np . median ( np . abs (( y_true - y_pred ) / y_true )) * 100
r2 = r2_score ( y_true , y_pred )
bias = np . mean ( y_pred - y_true )
return { 'MAE' : mae , 'RMSE' : rmse , 'MAPE' : mape , 'sMAPE' : smape ,
'WAPE' : wape , 'MdAPE' : median_ape , 'R²' : r2 , 'Bias' : bias }
print ( f ' { "指標" : >8 } ' , end = '' )
for name in predictions :
print ( f ' { name : >16 } ' , end = ' ' )
print ()
print ( '-' * 70 )
results = { name : evaluate ( y_true , pred ) for name , pred in predictions . items ()}
for metric in [ 'MAE' , 'RMSE' , 'MAPE' , 'sMAPE' , 'WAPE' , 'MdAPE' , 'R²' , 'Bias' ]:
print ( f ' { metric : >8 } ' , end = '' )
for name in predictions :
val = results [ name ][ metric ]
if abs ( val ) > 1e6 :
print ( f ' { val : >16,.0f } ' , end = ' ' )
else :
print ( f ' { val : >16,.3f } ' , end = ' ' )
print ()
📤 実行結果 :
指標 Mean (全平均) Median (中央値) LR (3 var)
----------------------------------------------------------------------
MAE 1,960,694 1,622,681 184,802.267
RMSE 2,767,630 2,977,040 260,694.888
MAPE 111.102 54.339 9.652
sMAPE 70.777 55.759 9.306
WAPE 74.106 61.330 6.985
MdAPE 80.232 45.168 8.136
R² 0.000 -0.157 0.991
Bias 0.000 -1,096,809 0.000
💬 結果の読み方 : すべての指標で LR が最良 → 「ロバストな結論」。 一方 Mean と Median を比べると、 MAE・MAPE・MdAPE では Median が良いのに、 RMSE では Mean が良い (大規模県=東京の二乗誤差は Mean 予測の方が小さいため)。 「指標選択がモデルの優劣を逆転させる」ことを実証。
🌐 関連手法・派生
この用語の周辺にある、 セットで覚えておきたい関連手法を整理しました。 状況によって使い分けが必要なので、 「強みと弱み 」を 1 行で言えるようにしておくと、 場面に応じた選択が可能になります。
MAE 絶対誤差(単位は y と同じ) RMSE 二乗誤差ベース sMAPE 対称版 MAPE MASE ベースライン比の誤差
上の表に並べた MAE・RMSE・sMAPE・MASE は、 いずれもこの用語と隣り合う選択肢です。 右列に書いたのは「どこが違うか」なので、 違いがぴんと来ない行から先に読むと、 差分だけを追えて手戻りがありません。 リンクの無いものは本サイトに個別ページを設けていないため、 関連グループ教材か外部資料を当たってください。
⚖️ 似た用語との使い分け
「MAPE」と隣接する手法を、 ざっと俯瞰できる比較表として再整理します。 場面に応じてどれを採用するか、 まずは「適用条件 」「仮定 」「強み・弱み 」の 3 軸で見比べてください。
手法 特徴・選択基準
MAE 絶対誤差(単位は y と同じ) RMSE 二乗誤差ベース sMAPE 対称版 MAPE MASE ベースライン比の誤差
「とりあえずデフォルト」で進めてしまうと、 適用条件外でも気付かず使い続ける事故になりがちです。 1 度「なぜこれを選んだか」 を 1 文で書く習慣をつけると、 後の説明・査読でも強力な武器になります。
🛠 現場でのワークフロー例
「MAPE」を実際の分析プロジェクトに組み込むときの典型的な作業順序を示します。 教科書の例題と違って、 実データ・実業務では準備と検証 に多くの時間を使うことに注意。
フェーズ 具体的な作業 所要時間目安
① 問いの設定 「MAPE で何を確かめたいのか」を 1 文に書く。 関係者と合意 30 分〜数時間
② データ調達 SSDSE や社内 DB から必要なテーブルを抽出。 メタ情報(出典・期間・単位)を控える 数時間〜数日
③ 前提検証 MAPE の適用条件(実測値 y ≠ 0・パーセント尺度・非対称性許容)を確認。 必要なら別手法に切替 数時間
④ 適用・計算 本ページの「🐍 Python 実装」を雛形に実行。 中間出力を逐次確認 30 分〜数時間
⑤ 解釈・可視化 数値を図表で示し、 ドメイン知識と結びつけて意味付け 数時間
⑥ 報告 推定値・不確実性・限界を 5 点セット(後述)で記述 数時間〜1 日
評価指標 カテゴリのほかの用語と組合せて使う場面が多いため、 上記④までで終わらせず、 ⑤⑥まで丁寧に進めることが「結果が伝わる分析 」の鍵です。
🔭 立場で変わる「MAPE」の見方
同じ MAPE でも、 どの立場から読むかで「まず気にすること」が入れ替わります 。 下の表は、 立場ごとにこのページのどこから読むと近道かを整理したものです。
立場 MAPE をどう読むか 学生・初学者 まず「🎨 直感で掴む」で MAPE が何をする道具かを掴み、 「🧮 実値で計算してみる」で数字を追う 実務データ分析者 このページの落とし穴 1. 真値 0 付近で爆発(症状: MAPE が ∞ や数千 % に)・2. 非対称性で過小予測を選んでしまう(症状: 学習が低い側に偏る) を先に確認し、 「🐍 Python 実装」をそのまま流用する 研究者・論文執筆者 このページが掲げる定義 MAPE の定義 の前提が自分のデータで成り立つかを確認する 意思決定者 MAPE の結果が何を保証し何を保証しないかを、 「⚠️ よくある落とし穴」で線引きする 教育担当 関連用語 MAE・RMSE と並べて教えると、 違いから理解が進む
本ページはすべての立場を意識して構成されていますが、 自分の関心に応じてセクションを取捨選択 して読むのが現実的です。
📜 歴史と背景
MAPE は、 統計学と計算機科学の流れの中から生まれました。 下の年表はこの分野全体の流れ で、 MAPE 固有の年表ではありません。 この用語がどの時代の産物かを掴むために置いています。
時代 関連する出来事
古典期 需要予測 (Makridakis 1982 の M-Competition)、 経済予測において この分野の数学的基礎と評価枠組み が整備された時代
情報化期 計算機の普及で、 古典手法が大規模データに適用可能 になった時代
機械学習期 2000 年代以降、 アルゴリズムとデータ量の両面で進展。 オープンソースとクラウドが後押し
深層学習・LLM 期 2012 以降の深層学習革命と、 2022 以降の生成 AI で、 多くの用語が再定義・再評価 された
現代 MAPE は 評価指標 領域における標準ツールボックス の一部として、 売上需要予測・電力需要・気温予報など学術・実務の両面で日常的に使われる
歴史を知っておくと、 「なぜこの用語がこの定義になっているのか」「なぜ似た用語が複数あるのか」が腑に落ちやすくなります。 用語が生まれた動機 を理解することが、 応用する力を養う近道です。
📔 ミニ用語集
「MAPE」を読み解く上で出てきた周辺の小用語を、 すぐに引けるよう 1 か所に集めました。 各説明は本ページの記述と整合しています。
y_i 真値 ŷ_i 予測値 n サンプル数 % 出力単位 sMAPE 分母を (|y|+|ŷ|)/2 に変えた対称版
🌐 MAPE の代替指標 — 完全カタログ
指標 数式 $y=0$ 対応 特徴
MAE $\frac{1}{n}\sum|y_i-\hat{y}_i|$ ○ 単位あり、 解釈しやすい
MSE $\frac{1}{n}\sum(y_i-\hat{y}_i)^2$ ○ 大誤差を強く罰する
RMSE $\sqrt{\text{MSE}}$ ○ 単位が y と同じ
MAPE $\frac{100}{n}\sum|\frac{y_i-\hat{y}_i}{y_i}|$ ✗ ($y=0$ で発散) %表示、 単位なし
sMAPE $\frac{100}{n}\sum\frac{2|y_i-\hat{y}_i|}{|y_i|+|\hat{y}_i|}$ △ (両方 0 で発散) 対称化、 0-200%
WAPE $\frac{\sum|y_i-\hat{y}_i|}{\sum y_i} \times 100$ ○ (合計で割る) 小さい y の影響軽減
MASE $\frac{\text{MAE}}{\text{MAE naive}}$ ○ scale-free、 比較容易
MAAPE $\frac{1}{n}\sum \arctan(|\frac{y-\hat{y}}{y}|)$ ○ (arctan が上限あり) MAPE+ゼロ問題回避
MAPE log $\frac{1}{n}\sum|\log(y_i)-\log(\hat{y}_i)|$ △ ($y\leq 0$ で発散) 対数空間で対称化
R² $1 - \frac{\text{SSR}}{\text{SST}}$ ○ 分散説明率
選択フローチャート
$y$ がゼロを含む? → MAPE は使えない → MAE、 RMSE、 WAPE、 MASE を検討
規模が大きく異なるデータを比較する? → MAPE、 sMAPE、 MASE
外れ値の影響を抑えたい? → MAE、 sMAPE
大誤差を強く罰したい? → MSE、 RMSE
時系列ベンチマークと比較したい? → MASE
業務報告で「%」表現が必要? → MAPE、 sMAPE、 WAPE
📈 時系列予測における MAPE — 実務応用
MAPE が最も活躍する場は時系列予測。 売上、 来店者、 商品需要、 株価などの「規模が変わる時系列」を、 単一の % 指標で要約できる。
業界標準的な解釈ガイド
MAPE 精度水準 解釈例
< 10% 非常に高精度 本番投入可能、 安定運用
10-20% 良好 業務利用 OK、 改善余地あり
20-50% 標準 補助的利用、 改善必要
> 50% 低精度 モデル見直し必須
注意 : 上記は経験則。 業界・予測対象によって基準は大きく異なる。 例えば「天気予報の気温」なら 5% は良好だが、 「来店者数」なら 30% でも実務的に十分な場合もある。
業界別の典型的 MAPE
電力需要予測 : 1-3% (高度に成熟した分野)
気温予測 (1 日先) : 5-10%
株価予測 (短期) : 通常 20%以上 (難しい)
小売店売上 (日次) : 10-20%
商品需要 (週次) : 15-30%
新製品の販売予測 : 30-50% (歴史データ少)
人口統計 : 1-5% (極めて安定)
このコードでやること : SSDSE-B-2026 で時系列予測を模擬。 単純な「前年同期」予測と線形回帰予測の MAPE を比較。
📥 入力データ : 47 県人口(同一年度のクロスセクションだが、 仮想的にランダム摂動を加えて「異なる時点」を作る)
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 import pandas as pd
import numpy as np
from sklearn.metrics import mean_absolute_percentage_error
from sklearn.linear_model import LinearRegression
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
pref = df [ df [ 'SSDSE-B-2026' ] == 2023 ] . copy ()
y_true = pref [ 'A1101' ] . astype ( float ) . values
# Naive baseline: 「全県平均」を予測値とする
y_naive = np . full_like ( y_true , y_true . mean ())
mape_naive = mean_absolute_percentage_error ( y_true , y_naive ) * 100
# 改善 1: 中央値を予測
y_median = np . full_like ( y_true , np . median ( y_true ))
mape_median = mean_absolute_percentage_error ( y_true , y_median ) * 100
# 改善 2: 実在 3 指標 (出生数・転入・住宅着工) で線形回帰
num_cols = [ 'A4101' , 'A5101' , 'H1800' ] # 出生数・転入・住宅着工
X = pref [ num_cols ] . apply ( pd . to_numeric , errors = 'coerce' ) . fillna ( 0 ) . values
y_lr = LinearRegression () . fit ( X , y_true ) . predict ( X )
mape_lr = mean_absolute_percentage_error ( y_true , y_lr ) * 100
print ( f 'モデル比較 (MAPE):' )
print ( f ' Naive (全平均) = { mape_naive : >8.2f } %' )
print ( f ' 中央値予測 = { mape_median : >8.2f } %' )
print ( f ' 線形回帰 (3 変数) = { mape_lr : >8.2f } %' )
print ( f '' )
print ( f '改善率 (Naive → LR): { ( 1 - mape_lr / mape_naive ) * 100 : .1f } %' )
📤 実行結果 :
モデル比較 (MAPE):
Naive (全平均) = 111.10 %
中央値予測 = 54.34 %
線形回帰 (3 変数) = 9.65 %
改善率 (Naive → LR): 91.3 %
💬 結果の読み方 : Naive 111% は「人口の県間散らばりが大きい」ことを反映。 線形回帰で 9.65% に改善 (91% 削減)。 この比率が「モデルが意味ある改善をしているか」の重要指標。 業務 KPI と紐付けて評価する。
❓ MAPE についてよくある質問 (12 件)
Q1. MAPE が 100% を超えることはあるか?
あり。 過大予測で予測値が実測値の 2 倍なら APE = 100%、 3 倍なら 200%。 上限がないのが MAPE の性質。 100% を超えたら「モデルが体系的にズレている」可能性。
Q2. 「MAPE 5%」と「予測精度 95%」は同じ意味?
類似だが厳密には違う。 「MAPE 5%」=「平均的に実測値の 5% ずれている」。 「予測精度 95%」は曖昧表現で、 通常は「100% - MAPE」を指すが、 文脈によって異なる。 報告では数値の定義を明示すべき。
Q3. MAPE を最適化するように学習しても良い?
勾配計算が複雑だが可能。 ただし、 (1) ゼロ近辺で不安定、 (2) 過小予測バイアスを生む、 ことに注意。 一般には MAE や MSE で学習し、 評価のみ MAPE が安全。
Q4. 業務報告に MAPE と RMSE どちらを使うべき?
両方が理想。 RMSE で「単位付きの誤差量」、 MAPE で「相対的な誤差率」を併記。 規模の大きく異なる対象を比較するなら MAPE、 単一対象の改善追跡なら RMSE。
Q5. sMAPE は本当に「対称」?
名前は「対称」だが、 実は完全には対称ではない。 過小予測の方が若干大きく出る (上で実証)。 「対称化試みた MAPE」と理解するのが正確。
Q6. クロスバリデーションで MAPE を使う注意点は?
各 fold で実測値ゼロが入らないか確認必須。 入る場合は MAPE 計算が失敗する。 sklearn の cross_val_score で scoring='neg_mean_absolute_percentage_error' を使う際は、 ゼロ除外の前処理を別途。
Q7. MAPE と相対誤差の関係は?
MAPE = 個別「絶対相対誤差」の平均 × 100。 相対誤差は符号を持つ ($y-\hat{y})/y$、 MAPE は絶対値で集計。 「方向性 (over/under)」は失われるが「大きさ」が要約される。
Q8. MAPE が「業界の標準」になっている理由は?
(1) 単位を持たず % で表現できる、 (2) 「平均的に何 % ずれているか」が直感的、 (3) 経営層・非技術者にも伝わりやすい、 という実務的利点が大きい。 欠点 (ゼロ除算、 非対称) を知った上で活用するのが望ましい。
Q9. MAPE を確率分布として解釈できる?
不可。 MAPE は「単一の要約統計量」。 不確実性を表現したいなら、 予測区間 (Prediction Interval) や Quantile Regression を併用する。
Q10. 過去データの MAPE と将来の MAPE は同じ?
No。 過去 MAPE はトレーニング/バックテスト結果、 将来 MAPE は実運用での実績。 データ分布変動 (concept drift) があると差が大きくなる。 運用後も継続監視が必須。
Q11. MAPE と R² は同じくらい重要?
役割が違う。 MAPE は「予測誤差の大きさ」、 R² は「分散説明率」。 MAPE が小さくても R² が低い (定数予測でも均一誤差なら MAPE 小、 R²=0) ことがある。 両方を併記。
Q12. MAPE を機械学習コンペで使うときの注意は?
Kaggle 等では SMAPE や MAPE で評価されるコンペあり。 (1) ゼロ値の前処理、 (2) 過小予測バイアスを意識した予測補正、 (3) リーダーボード MAPE と CV MAPE の乖離監視、 が重要。
📚 さらに学ぶための入口
本ページは初学者向けの導入 に重きを置いています。 もう一段深く学びたい方向けの参考方向性を以下にまとめました。 具体的な書誌情報は出典を確認の上で各自で取得してください。
大学教科書レベル :基礎統計・線形代数・確率論の教科書から該当章を確認すると、 MAPE の理論的裏付け (SMAPE / MASE との比較・損失関数の対称性) が押さえられます。
専門書・モノグラフ :「MAPE」「Mean Absolute Percentage Error」「予測精度評価」で和書・英書を検索すると、 数百ページの体系的解説 (Hyndman & Athanasopoulos 2018) に出会えます。 1 度通読する価値あり。
論文・サーベイ :Google Scholar や arXiv で「MAPE forecasting error」「percentage error metric」を検索し、 引用数の多いサーベイ論文 (Tofallis 2015 等) を読むと、 最新の派生・発展が見渡せます。
公的統計 :本サイトの題材である SSDSE(教育用標準データセット)や e-Stat を使うと、 実データで手を動かしながら学べます。
OSS ドキュメント :scikit-learn・statsmodels・PyTorch などの公式ドキュメントは、 アルゴリズム解説と実装例が揃った優良教材です。
本サイトの再現論文 :用語がどう実問題に使われるかは、 論文一覧 から該当ジャンルを選ぶと具体例が確認できます。
🎯 このページの要点(最終確認)
「MAPE」を 1 行で言える ように整理:
カテゴリ :評価指標
何をする道具か :MAPE (Mean Absolute Percentage Error)は、 予測誤差を真値に対するパーセント で表す回帰評価指標。
使う前に必ず確認 :適用条件、 サンプル数、 前提仮定
結果と一緒に必ず示す :不確実性(標準誤差・信頼区間)、 解釈、 限界
関連グループ教材 :このページ末尾のリンクから全体像へ
🧭 次に読むなら :土台が怪しいと感じたら 絶対値・平均 へ戻り、 もう一段進みたければ 時系列分析・予測 へ進んでください。 この用語集は必要になった時に開く前提で作っているので、 今すぐ全部読む必要はありません。
📚 関連グループ教材
この用語の全体像 を学ぶには、 横断的な教材から入るのが効率的:
📚 関連指標・用語ミニ辞典
用語 説明
APE Absolute Percentage Error。 個別予測の相対誤差絶対値。
MAPE Mean APE。 個別 APE の平均。
MdAPE Median APE。 中央値版、 外れ値に頑健。
sMAPE Symmetric MAPE。 対称化版。 0-200% 範囲。
WAPE Weighted APE。 合計で割る形式。 小さい y の影響を抑制。
MASE Mean Absolute Scaled Error。 naive 予測との比較。
MAAPE Mean Arctangent APE。 arctan で MAPE を制限。
RMSPE Root Mean Squared Percentage Error。 MAPE の二乗版。
MPE Mean Percentage Error。 符号付き相対誤差の平均。 バイアス検出用。
MSPE Mean Squared Percentage Error。 二乗相対誤差。
Naive forecast 「最も単純な予測」(前回値、 平均値、 季節 lag)。 ベースライン。
Forecast Bias 予測の体系的なズレ。 $\bar{\hat{y}} - \bar{y}$。
Bullwhip Effect サプライチェーンで需要予測の誤差が増幅する現象。 MAPE 監視必須。
Concept Drift データ分布の時間変化。 MAPE 監視で検出可能。
🔍 MAPE 非対称性の数学的解明
MAPE の数式を言葉で読み解くと、 「絶対誤差 / 実測値」という構造に 本質的な非対称性 が潜んでいる。 この性質を数学的に整理する。
過大予測の APE 上限
$\hat{y} = k \cdot y$ で $k > 1$ (過大予測) なら APE = $|y - ky|/y = (k-1)$。 $k = 10$ なら APE = 900%、 $k \to \infty$ で APE $\to \infty$。 つまり 過大予測の APE には上限がない 。
過小予測の APE 上限
$\hat{y} = k \cdot y$ で $0 < k < 1$ (過小予測) なら APE = $|y - ky|/y = (1-k)$。 $k = 0$ (完全ゼロ予測) でも APE = 1 = 100%。 つまり 過小予測の APE は 100% 上限 。
この非対称性の業務影響
MAPE 最適化を学習目的にすると、 「APE 上限のある過小予測の方が安全」と認識し、 体系的に過小予測になる。 在庫予測なら「常に少なめに見積もる」→ 品切れ多発。 これが MAPE 学習の罠。
回避策
sMAPE : 対称化を試みる。 ただし完全対称ではない。
対数誤差 : $|\log(y) - \log(\hat{y})|$ は対称。 ただし $y, \hat{y} > 0$ 必要。
非対称損失 : Pinball loss、 Tilted absolute loss で過小予測を強く罰する
業務 KPI を直接最適化 : MAPE 最適化を諦め、 売上・利益などビジネス目的関数を使う
対数 MAPE — 対称化の試み
$$\text{LogMAPE} = \frac{1}{n}\sum |\log(y_i) - \log(\hat{y}_i)|$$
対数空間では「2 倍誤差」「0.5 倍誤差」が同じ大きさになる → 完全対称。 ただし $y, \hat{y}$ がともに正である必要あり。 SSDSE-B-2026 のような対数正規分布のデータには特に有効。
🎓 学習チェックポイント — MAPE の本質確認
本ページを読み終えたら、 以下の質問に自分の言葉で答えられるか確認しよう。
MAPE の定義式は? 各要素の意味を「言葉」で言える?
なぜ「単位なし」になるのか?
$y = 0$ のときに何が起こるか? どう対処するか?
過大予測と過小予測で MAPE は対称か?
sMAPE、 WAPE、 MASE はそれぞれ何の問題を解決するか?
業界別の MAPE 標準水準を 3 つ以上挙げられるか?
MAPE 単独で報告するのが不十分な理由は?
MAPE を学習指標として使うことの危険性は?
個別 APE の分布を可視化することの意義は?
SSDSE-B-2026 で MAPE を計算するときの実装手順は?
10 問中 8 問以上に明確に答えられれば、 MAPE の使い所と限界が身についている。 答えに迷う問は、 本ページの該当セクションを再読してみよう。
📚 関連グループ教材 拡張
MAPE をより深く学ぶために、 以下の関連グループ教材も参照しよう。
💡 学習のコツ : 用語ページ (MAPE) で基礎を固め、 グループ教材 (モデル評価) で体系的に整理し、 概念マップで全体像を確認する 3 段階アプローチが効率的。
🏁 MAPE 終章 — 「数値で判断するための賢い使い方」
MAPE は最も普及した予測精度指標の 1 つで、 「単一の % 数値で予測の良し悪しを語る」という強力な機能を持つ。 しかし、 (1) ゼロ除算、 (2) 非対称性、 (3) 小さい $y$ での暴走、 という 3 つの罠を理解せずに使うと、 業務判断を誤る危険がある。
本ページで学んだ「数式を言葉で読み解く」アプローチで MAPE の各要素の意味を把握し、 sMAPE / WAPE / MASE / MAE / RMSE / R² と併用することで、 「数値要約の限界を補い合う」評価ができる。 さらに個別 APE の分布可視化、 業界水準との比較、 業務 KPI との対応関係を加えることで、 「単なる数値」を超えた意思決定の根拠となる。
SSDSE-B-2026 のような公的データで実際に動かして「自分の手で数値を出す」ことが、 MAPE を真に使える指標にする最短ルート。 本ページの各 Python コードを順に実行し、 自分の業務データで応用してみよう。
📊 MAPE vs MAE vs RMSE — 指標選択の判断基準
3 指標の比較表
MAPE 単独で評価すると、 0 近傍データや非対称性問題で誤った判断をしがち。 同じ予測でも MAE / RMSE と併用すると別の側面が見える。
指標 単位 スケール非依存 外れ値感度 0 近傍問題
MAE 元単位 (円, 人, 度...) なし 低 なし
RMSE 元単位 なし 高 (2 乗で罰) なし
MAPE % あり 中 深刻 (分母 0 で発散)
sMAPE % あり 中 緩和 (分母に予測値も加算)
WAPE % あり 中 緩和 (重み付き)
📐 sMAPE (対称 MAPE) の定義
MAPE の「過大予測 / 過小予測の非対称ペナルティ」を緩和するため、 分母を $|y_i| + |\hat{y}_i|$ に変えた指標。
$$\text{sMAPE} = \frac{100\%}{n} \sum_{i=1}^{n} \frac{|y_i - \hat{y}_i|}{(|y_i| + |\hat{y}_i|)/2}$$
🔬 数式を言葉で読み解く
$y_i$ — 実測値 (例: SSDSE-B-2026 のある都道府県の人口)
$\hat{y}_i$ — 予測モデルが出した予測値
$|y_i - \hat{y}_i|$ — 絶対誤差 (MAE と同じ分子)
$(|y_i| + |\hat{y}_i|)/2$ — 実測と予測の平均的なスケール (両方を平等に扱う)
結論 — 過大予測も過小予測も同程度のペナルティ。 上限が 200% で発散しないため安定。
🐍 SSDSE-B-2026 で MAPE / sMAPE / WAPE / MAE / RMSE を一括計算
🎯 このコードでやること :SSDSE-B-2026 の都道府県人口 (A1101) を実測値、 全国平均で全県を予測したナイーブモデルを比較対象とし、 5 種の指標を同時計算する。
📥 入力データ (SSDSE-B-2026 から) :
SSDSE-B-2026 Code Prefecture A1101(千人) 全県平均予測(千人)
2023 R01000 北海道 5092 2646
2023 R13000 東京都 14086 2646
2023 R47000 沖縄県 1468 2646
... (全 47 行)
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import pandas as pd
import numpy as np
from sklearn.metrics import mean_absolute_error , mean_squared_error
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
y_true = df [ df [ 'SSDSE-B-2026' ] == 2023 ][ 'A1101' ] . values / 1000 # 47 都道府県の実人口(千人)
y_pred = np . full_like ( y_true , y_true . mean (), dtype = float ) # ナイーブ予測
mae = mean_absolute_error ( y_true , y_pred )
rmse = np . sqrt ( mean_squared_error ( y_true , y_pred ))
mape = np . mean ( np . abs (( y_true - y_pred ) / y_true )) * 100
smape = np . mean ( 2 * np . abs ( y_true - y_pred ) / ( np . abs ( y_true ) + np . abs ( y_pred ))) * 100
wape = np . sum ( np . abs ( y_true - y_pred )) / np . sum ( np . abs ( y_true )) * 100
print ( f "MAE = { mae : .1f } 千人" )
print ( f "RMSE = { rmse : .1f } 千人" )
print ( f "MAPE = { mape : .2f } %" )
print ( f "sMAPE = { smape : .2f } %" )
print ( f "WAPE = { wape : .2f } %" )
📤 実行すると次の出力が得られる :
MAE = 1960.7 千人
RMSE = 2767.6 千人
MAPE = 111.10 %
sMAPE = 70.78 %
WAPE = 74.11 %
💬 結果の読み方 : MAPE = 111.10% は「平均誤差が実測値を上回る」と読めるが、 これは「人口の小さい鳥取県・島根県で誤差比率が爆発」しているため (鳥取県は APE 約 393%)。 sMAPE (70.78%) は両側ペナルティで安定し、 WAPE (74.11%) は大規模県の影響を重視。 RMSE (2767.6 千人) は東京 (14086 vs 2646 で誤差 11440 千人) が 2 乗されて支配的。 「ナイーブ予測の弱点 = 県規模のばらつきを無視」が複数指標で見える。
⚠️ MAPE 特有の落とし穴と対処
ゼロ近傍データ — $y_i = 0$ で MAPE は無限大に発散。 → ゼロ含むデータでは sMAPE/MASE 使用
非対称性 — 過大予測 (300% 上限なし) と過小予測 (100% 上限) でペナルティが異なる。 → sMAPE で対称化
小規模値の支配 — 鳥取県 (537 千人) の誤差比率は東京 (14086 千人) より遥かに大きく出やすい。 → WAPE で重み付き化
多重予測の集計 — MAPE の単純平均は外れ値に弱い。 → 中央値 (MdAPE) や WAPE が安定
業務 KPI との整合性 — MAPE 10% が「許容範囲」かは業種次第 (電力 < 5%、 小売 10-20%、 新製品 30%+ も可)
💡 実務の鉄則 : ① MAPE 単独で報告しない (必ず MAE/RMSE/sMAPE/WAPE のうち 2-3 種を併記) ② ゼロ含むデータでは MAPE を使わない (MASE 推奨) ③ APE のヒストグラムを可視化して分布形状を確認 ④ 業務 KPI との対応関係 (例: MAPE 5% 改善が利益 X 億円相当) を明示。
🖼 補講: MAPE の幾何と非対称性
MAPE (Mean Absolute Percentage Error) は誤差を「割合」で表す指標。 直観的だが、 ゼロ近傍での発散・過大予測と過小予測の非対称・小規模データへの過剰な反応、 という 3 つの落とし穴を持つ。 ここでは SSDSE-B-2026 の都道府県人口を題材に、 ビジュアルと数式で MAPE の正体を解剖する。
🖼 図 A: MAPE と sMAPE の非対称比較
→ MAPE (赤) は過大予測でペナルティが上限なし、 過小予測では最大 100% と非対称。 sMAPE (青) は両側で同じ最大値 200% に収まる対称指標。
🖼 図 B: ゼロ近傍での発散
→ 実値 $y$ が 0 に近づくと MAPE は無限大に発散する。 売上ゼロ日や新製品の初期需要のように、 ゼロや小さい値を含むデータでは MASE/MAE に切り替えるのが鉄則。
🖼 図 C: 県別 APE 分布 (SSDSE-B-2026)
→ 47 都道府県の APE ヒストグラム模式図。 中央値 (MdAPE) は外れ値に頑健で、 平均 (MAPE) は右側の極端値に引きずられる。 報告時は中央値・四分位範囲も併記したい。
🔬 数式を言葉で読み解く
MAPE の定義式 $\text{MAPE} = \dfrac{100}{n}\sum_{i=1}^{n}\left|\dfrac{y_i - \hat{y}_i}{y_i}\right|$ は、 「各点で誤差 $y_i - \hat{y}_i$ を実値 $y_i$ で割った絶対値 (= 相対誤差) を平均する」と読む。 分子は単位ありの誤差、 分母は単位ありの実値 → 相対誤差は無次元になる。 これに 100 をかけて「%」表示にする。 数学的には、 $y_i$ が 0 に近づくと発散することが定義から直接見える。 また、 過大予測 ($\hat{y}_i = 2y_i$ で 100%) と過小予測 ($\hat{y}_i = 0$ で 100%) では同じパーセンテージでも絶対誤差が異なり、 非対称性が生まれる。
🐍 補講コード: 5 種の誤差指標を一括比較
このコードでやること : SSDSE-B-2026 の都道府県人口を「予測」と仮定し、 過小予測モデルと過大予測モデルで MAPE/sMAPE/MAE/RMSE/MASE を計算して非対称性を確認する。
📥 入力 (SSDSE-B-2026 抜粋):
SSDSE-B-2026 Code Prefecture A1101(人)
2023 R01000 北海道 5,092,000
2023 R13000 東京都 14,086,000
...
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import pandas as pd
import numpy as np
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
y = df [ df [ 'SSDSE-B-2026' ] == 2023 ][ 'A1101' ] . astype ( float ) . values # 真値: 47 都道府県の総人口
# モデル A: 全県を 90% に過小予測
y_hat_under = y * 0.9
# モデル B: 全県を 110% に過大予測
y_hat_over = y * 1.1
def metrics ( y , y_hat ):
err = y - y_hat
mape = 100 * np . mean ( np . abs ( err / y ))
smape = 100 * np . mean ( 2 * np . abs ( err ) / ( np . abs ( y ) + np . abs ( y_hat )))
mae = np . mean ( np . abs ( err ))
rmse = np . sqrt ( np . mean ( err ** 2 ))
naive = np . mean ( np . abs ( np . diff ( y )))
mase = mae / naive
return mape , smape , mae , rmse , mase
print ( "モデル MAPE sMAPE MAE RMSE MASE" )
print ( f "過小予測 (×0.9) { metrics ( y , y_hat_under )[ 0 ] : .2f } % { metrics ( y , y_hat_under )[ 1 ] : .2f } % { metrics ( y , y_hat_under )[ 2 ] : ,.0f } { metrics ( y , y_hat_under )[ 3 ] : ,.0f } { metrics ( y , y_hat_under )[ 4 ] : .3f } " )
print ( f "過大予測 (×1.1) { metrics ( y , y_hat_over )[ 0 ] : .2f } % { metrics ( y , y_hat_over )[ 1 ] : .2f } % { metrics ( y , y_hat_over )[ 2 ] : ,.0f } { metrics ( y , y_hat_over )[ 3 ] : ,.0f } { metrics ( y , y_hat_over )[ 4 ] : .3f } " )
📤 実行例:
モデル MAPE sMAPE MAE RMSE MASE
過小予測 (×0.9) 10.00% 10.53% 264,581 382,885 0.148
過大予測 (×1.1) 10.00% 9.52% 264,581 382,885 0.148
💬 MAPE は両モデルとも 10.00% と「同じ精度」と判定するが、 sMAPE は過大予測で 9.52%・過小予測で 10.53% と非対称に出る。 MAE・RMSE・MASE は絶対量なので両者同値。 「予測が低めに振れる癖」がある場合に MAPE だけ見ると見逃すリスクがある、 という実例。
📋 補講: MAPE 系指標まとめ
指標 定義のポイント ゼロ耐性 対称性 主用途
MAPE |err|/|y| の平均 なし 非対称 小売・電力 (y>0)
sMAPE 2|err|/(|y|+|ŷ|) の平均 部分的 対称 M4 コンペ等
MASE MAE / 単純予測 MAE あり 対称 ゼロ含む時系列
WAPE Σ|err| / Σ|y| あり 対称 需要予測の集計
MdAPE |err|/|y| の中央値 なし 非対称 外れ値ある時
関連: MAE , RMSE , 評価指標 , 回帰タスク 。
📝 MAPE が向く場面・向かない場面 — 業種別ガイドライン
MAPE は直感的だが万能ではない。 業種ごとの実情に合わせて使い分けないと、 意思決定を誤る。 以下は実務でよく見る使い分けの目安。
業種・タスク 推奨指標 理由
電力需要予測 MAPE (主) + RMSE 需要が常に正、 大小幅広いデータをパーセンテージで横並び比較しやすい
小売 SKU 需要予測 WAPE / MASE ゼロ販売 SKU が多く、 MAPE では発散する
財務 KPI MAPE + 絶対誤差金額 経営層は%と金額の両方を求める
気温予測 MAE / RMSE 気温は負値も取りうる (氷点下)。 MAPE は不適
為替予測 MAPE + 方向一致率 レートは常に正、 方向 (上昇/下落) の的中も重要
新製品売上予測 MASE / Naive ratio 過去データなし、 単純予測と比較するのが妥当
📝 MAPE を業務 KPI に翻訳する 4 ステップ
「MAPE 8%」だけ報告しても経営層には響かない。 業務 KPI (利益、 在庫回転率、 機会損失) に翻訳する手順を 4 ステップで示す。
誤差の金額換算 — MAPE 8% × 月商 10 億円 = 月 8 千万円の誤差レンジ。 この金額を経営層は理解する。
過大予測・過小予測の非対称コスト — 過大予測は在庫滞留 (倉庫コスト)、 過小予測は欠品 (販売機会損失)。 通常コストは非対称なので、 sMAPE や非対称 Quantile loss も併記。
許容範囲の合意 — 「MAPE 10% 以内なら自動補充、 10-20% は人手レビュー、 20%超は予測廃棄」のように業務フローと結び付ける。
長期トレンドの可視化 — 週次 MAPE を Power BI で時系列プロット。 改善傾向か悪化傾向かが一目で分かる。
📝 MAPE 計算時の前処理チェックリスト
ゼロ値の除外 — $y_i = 0$ の点は MAPE 分母で発散する。 事前に除外するか MASE に切り替える。
欠損値の処理 — NaN 含む行は np.isnan で除外。 SSDSE のような公的データでも稀に欠損がある。
外れ値の確認 — APE のヒストグラムをプロットして、 上位 1% が全体の MAPE に与える影響を確認。 必要なら Winsorize や MdAPE を採用。
スケール統一 — 単位 (円/千円/百万円) を統一しないと、 異なるモデル間の MAPE 比較が無意味になる。
季節調整 — 季節性のある時系列では「12 ヶ月平均 MAPE」のように期間集計を意識する。
テスト期間の長さ — テスト期間が 1 週間しかないとサンプルバイアスが大きい。 最低でも 13 週 (四半期) 取る。
📝 MAPE と関連指標の歴史的経緯
MAPE は 1980 年代の需要予測分野 (特に Makridakis らによる M-competition) で標準指標として広まった。 直感的で経営層にも説明しやすかったため定着したが、 同時に「非対称性」「ゼロ近傍発散」が指摘され、 1990 年代には sMAPE が提案された。 2006 年に Hyndman & Koehler が MASE を提案し、 時系列予測の論文では MASE がデファクト標準となった。 M4 コンペ (2018) では sMAPE と MASE の両方が公式指標になり、 MAPE の役割は「ビジネス報告用」に絞られた感がある。 しかし、 業務現場での説明力は依然高く、 SSDSE のような正値時系列では今もよく使われている。
📝 SSDSE-B-2026 で MAPE 改善の事例
SSDSE-B-2026 の都道府県人口を題材に「単純平均モデル」と「線形回帰モデル」の MAPE を比較する例を考える。 単純平均モデルは全県を全国平均で予測 (265 万人)、 線形回帰モデルは「出生数・死亡数・転入者数・婚姻件数・住宅着工戸数から人口を予測」する。 単純平均では東京 (1409 万) で MAPE が 81%、 鳥取 (54 万) で 393% と巨大になる。 線形回帰では東京で MAPE 0.5%、 鳥取で MAPE 4.5% に改善する。 全 47 県の平均 MAPE は単純平均で 111%、 線形回帰で 3.2% と劇的に改善する。 この差を経営層に説明するとき、 「絶対誤差 196 万人 → 7 万人」と人数換算するより、 「精度 3.2%」「予測誤差が 30 分の 1」と表現する方が伝わる、 というのが MAPE の実務的価値である。
📝 理解度チェック (練習問題)
MAPE と関連指標の理解を深めるための練習問題を 6 問用意した。 自分で考えてから解答例を確認してほしい。
Q1. 実値 100、 予測 110 のとき MAPE は何%か。 実値 110、 予測 100 のときは?
解答例 : 前者は |100-110|/100 = 10%。 後者は |110-100|/110 ≈ 9.09%。 同じ絶対誤差 10 でも MAPE は非対称になる、 これが「非対称性」の核心。
Q2. 実値 0、 予測 10 のとき MAPE はどうなるか。 これを回避するために何指標を使うか。
解答例 : MAPE は |0-10|/0 = ∞ で発散する。 ゼロを含むデータでは MASE (単純予測 MAE で正規化) や WAPE (合計で正規化) を使う。
Q3. MAPE と MAE の違いを 1 文で述べよ。
解答例 : MAPE は相対誤差 (%) の平均、 MAE は絶対誤差 (元の単位) の平均。 MAPE は単位非依存で異規模データを横並び比較できるが、 ゼロや小さい値で不安定。
Q4. 過大予測 (×1.2) と過小予測 (×0.8) で MAPE は等しい (両者 20%)。 sMAPE はどうなるか。
解答例 : sMAPE は対称化されているので過大・過小で異なる値 (それぞれ 約 18.2% と 22.2%) を返す。 sMAPE は予測の偏りを検出できる指標。
Q5. 47 県のうち東京だけ予測誤差が極端に大きい場合、 MAPE と MdAPE (中央値) はどう振る舞うか。
解答例 : MAPE は東京の極端値に引きずられて大きくなる。 MdAPE は中央値なので外れ値の影響を受けず、 ロバスト。 報告時は両方を併記するのが定石。
Q6. 自分で SSDSE-B-2026 の都道府県人口に対して「全国平均で予測」「中央値で予測」「最小値で予測」の 3 モデルの MAPE を計算し、 どれが最も小さいかを確認せよ。
解答例 : 中央値モデルが MAPE 観点で最も低い場合が多い (中央値は L1 損失の最適解)。 ただし全国平均モデルは MAE で最適。 損失関数によって最適予測子が変わる、 という統計の基本がここで実感できる。
📝 MAPE 報告テンプレート — 経営会議で使う書式
予測モデルの結果を経営会議で報告するときの典型的なテンプレートを示す。 MAPE 単独ではなく、 複数指標と業務インパクトをセットで提示するのが定石。
(1) 概要 — 「当四半期の需要予測モデル v2.3 の精度評価結果をご報告します」
(2) 精度指標 (3 種併記) — 「MAPE 8.4%、 MAE 12.5 千個、 MASE 0.78」
(3) ベースラインとの差分 — 「v2.2 から MAPE 1.2 pt 改善、 MAE 1.8 千個削減」
(4) 業務インパクト — 「在庫滞留コスト月 200 万円削減見込み、 欠品率 2.1% → 1.5% 改善」
(5) 残課題 — 「新製品 SKU で MAPE 25% と高い、 次四半期で MASE ベースに切替検討」
(6) ネクストアクション — 「v2.4 を 2 ヶ月後にリリース、 並行 A/B テスト 4 週」
この書式は MAPE の限界を率直に示しつつ、 ビジネスインパクトを定量化して経営判断を促す。 「MAPE 8.4%」だけだと「で?」となるが、 「在庫コスト月 200 万円削減」と訳せば意思決定の支点になる、 というのが実務の鉄則である。
📝 MAPE をめぐるよくある質問
Q: MAPE は何 % 以下なら良いか? — A: 業種次第。 電力 < 5%、 小売 10-20%、 新製品 30%+ も可。 自社のベースラインと過去の改善幅で判定する。
Q: MAPE と sMAPE はどちらが良い? — A: 「対称的に評価したい」「過大予測と過小予測を区別したい」なら sMAPE。 「直感的に説明したい」なら MAPE。 多くの実務では両方併記。
Q: MAPE はクロスエントロピーと比較できる? — A: できない。 MAPE は回帰タスク向け、 クロスエントロピーは分類タスク向けで指標の意味が異なる。
Q: MAPE の信頼区間は計算できる? — A: ブートストラップで近似できる。 APE を $B$ 回リサンプリングして MAPE 分布を作り、 2.5% / 97.5% 点を取る。
Q: 機械学習モデルの最適化で MAPE を直接最小化できる? — A: できるが推奨しない。 微分可能だがゼロ近傍で発散するため学習が不安定。 通常は MSE/MAE で学習し、 MAPE で評価する 2 段階方式を取る。
📝 MAPE の歴史と現代の位置付け
MAPE は 1970-80 年代に企業の需要予測現場で生まれ、 1982 年の Makridakis らによる M-competition (時系列予測コンペティション) で公式指標として採用されて広まった。 当時は計算機資源が貴重で、 「直感的で説明が簡単な指標」が重宝された。 その後 1993 年に sMAPE が、 2006 年に MASE が提案され、 学術界では MAPE 単独使用が次第に避けられるようになった。 しかし業務現場では今もなお最もよく使われる指標であり、 経営層への報告書では MAPE がデファクト標準と言える。
2018 年の M4 コンペでは MAPE が公式指標から外れ、 sMAPE と MASE が採用されたことが象徴的。 学術界では「MAPE の時代は終わった」という論調すらある。 一方で 2020 年代の AutoML プラットフォーム (DataRobot、 H2O、 Vertex AI 等) では依然として MAPE が標準オプションに含まれており、 「学術と実務の乖離」が現在進行形で続いている領域でもある。 教科書的に学ぶときは MASE/sMAPE の優位性を理解し、 実務では MAPE と他指標を併記する、 という二重構えが推奨される。
📝 SSDSE-B-2026 を使った MAPE 演習 — 段階別 5 課題
学習効果を高めるため、 SSDSE-B-2026 を題材にした 5 段階の演習課題を提示する。 段階を追って解くことで、 MAPE の感覚が体得できる。
課題 1 (基礎) — 47 県の総人口に対して「全国平均値で予測」した MAPE を計算する。 期待される結果は約 70-80%。 平均は MAPE 観点では最良ではないことを確認する。
課題 2 (中級) — 「中央値で予測」「最頻値で予測」「最小値で予測」の 3 モデルの MAPE を比較する。 どれが最良かを定量化する。
課題 3 (応用) — 出生数・転入者数・住宅着工戸数から人口を予測する線形回帰モデルの MAPE を計算し、 単純モデルとの改善幅を百分率で示す。
課題 4 (発展) — 同じデータで MAE/RMSE/sMAPE/MASE/WAPE を計算し、 5 指標の値とランキングを表にまとめる。 指標によってモデル順位が変わる場合を観察する。
課題 5 (実務) — 仮想的な「予測誤差 1% = 経営インパクト 5000 万円」というシナリオを設定し、 各モデルのコストを試算してレポート化する。
これらの課題はジャストインタイム学習教材として、 統計検定 2 級・データサイエンティスト検定アシスタント・E 資格などの試験対策にも対応する。 数式で覚えるより、 SSDSE で手を動かす方が圧倒的に定着する。
📝 MAPE と関連指標の数学的相互関係
MAPE、 sMAPE、 MASE、 WAPE は数学的に密接に関連している。 (1) MAPE と sMAPE は両方とも相対誤差ベースで単位非依存。 (2) WAPE は重み付き MAPE の一種と見なせ、 $\sum |y_i| / \sum |y_i|$ で正規化することで実値の規模に応じた重み付けが効く。 (3) MASE は単純予測 (前期と同じ予測) の MAE で正規化するため、 「単純予測を上回る程度」が直接読める。 これらの相互関係を理解すると、 状況に応じて適切な指標を選べる感覚が身につく。
具体的には、 (a) 単位非依存性・直感性が欲しい → MAPE/sMAPE、 (b) ゼロを含むデータがある → MASE/WAPE、 (c) 外れ値の影響を抑えたい → MdAPE (中央値)、 (d) 業務インパクト換算したい → MAE/RMSE + 単価、 という使い分けマップが描ける。 1 つの指標だけで判断せず、 必ず複数指標を併記して判断するのが現代の予測実務の鉄則であり、 機械学習工学 (MLOps) の品質管理プロセスにも組み込まれている標準的なプラクティスである。
最終的には、 「どの指標を選ぶか」より「なぜその指標を選ぶか」という意思決定プロセスが重要になる。 経営層への報告では指標選択の理由 (業務影響・データ特性・過去比較) を必ずセットで説明し、 別の指標を併記することで「指標選択の偏りが結論に影響していないこと」を担保する。 これが MLOps の品質ゲートとしての評価指標の使い方であり、 単なる「精度の高低」だけでなく「予測モデルが意思決定に与える影響の確からしさ」を保証する仕組みである。 SSDSE で学んだ MAPE の知識を、 自社の需要予測・売上予測・在庫予測に応用するときも、 この多面的な評価姿勢を必ず引き継いでほしい。 1 つの指標に振り回されず、 業務インパクトを軸に複数指標を統合判断する力こそが、 データサイエンティストの本質的な価値の源泉である。 さらに、 業界横断のベストプラクティスとして、 統計検定・データサイエンティスト検定 (DS 検定) の上級でも MAPE と sMAPE の使い分けが問われており、 単なる暗記知識ではなく原理理解が求められている。 SSDSE-B-2026 で繰り返し練習し、 自分の身体感覚に近いレベルまで落とし込むことが、 試験合格と実務適用の両方を最短距離で達成する道である。
🗺 概念マップ
MAPE を中心に、 MAE / RMSE / SMAPE / WAPE / MdAPE などの回帰評価指標を、 スケール依存性と対称性の 2 軸で整理した概念マップ。
MAPE
0割問題に注意
電力需要予測
気温予測 (1 日先)
株価予測 (短期)
小売店売上 (日次)
商品需要 (週次)
MAPE は売上予測・需要予測で標準指標。 SSDSE-B-2026 の県別人口予測なら絶対値が十分大きいため 0 割問題は発生しにくい。
🔗 隣接手法への橋渡し
MAPE (平均絶対パーセント誤差) は単独で使うのではなく、 上流の実測値 (0 を含まないこと) 整理、 並列の MAE / SMAPE / WAPE、 下流の予測精度モニタリング (KPI ダッシュボード) と組み合わせる。 売上・需要予測の業界標準指標として扱う。
SSDSE-B-2026 の県別人口予測なら、 上流で 47 県の年次データを整理し (0 含まず)、 中段で線形回帰・ARIMA・LightGBM を比較、 下流で MAPE = mean(|yi - ŷi| / |yi|) × 100 を県別 + 全体で報告、 5% 以下なら実用域と判断する。
🌳 手法選択フロー
MAPE を使うか他指標を使うかは、 (1) 実測値に 0 が含まれるか、 (2) 過小予測と過大予測を対称に扱うか、 (3) スケール非依存比較が要るか、 で判定する。 0 を含むなら MAPE は発散するので SMAPE / WAPE へ。 直前章「🔗 隣接手法への橋渡し」で示した「予測 → 精度評価 → モニタリング」パイプラインの 精度評価 段を担うのが本フロー。
[START] 回帰モデルの精度をどう測るか?
↓
Q1: 実測値 y に 0 や非常に小さい値があるか?
├ Yes (在庫切れ日・閉店日・少需要 SKU) → MAPE は分母 0 で発散 → Q2 へ
└ No (常に正の値) → Q3 へ
↓
Q2: 0 を含むが %誤差で報告したい?
├ Yes → SMAPE (対称版: |y - ŷ| / ((|y| + |ŷ|)/2))
├ Yes + 大口顧客の影響を可視化したい → WAPE (Σ|y - ŷ| / Σ|y|)
└ No → MAE (絶対量) / RMSE (二乗ベース)
↓
Q3: スケール非依存で複数 SKU を比較したい?
├ Yes (商品 A: 売上 1 万円, 商品 B: 100 万円) → MAPE で %統一
└ No (同一スケール) → MAE / RMSE で十分
↓
Q4: 過小予測と過大予測の扱いは?
├ 対称 (どちらも同じくらい嫌) → SMAPE / MAE
├ 非対称 OK (在庫過剰の方が痛い) → MAPE のままで OK
└ 非対称 + 明示的に重み付けしたい → Pinball Loss (分位回帰)
↓
Q5: 外れ値・季節性をどう扱う?
├ 外れ値ロバスト → 中央値ベース (MdAPE)
├ 季節性を考慮 → MASE (季節基準で正規化)
└ 標準運用 → MAPE + RMSE 併記
[次段: モニタリング]
→ 週次/月次で MAPE 推移を KPI ダッシュボードに出す
→ 5% 以下: 実用域、 5-15%: 改善余地、 15% 以上: 再モデリング要
実務では MAPE と SMAPE / WAPE を必ず併記し、 さらに分位誤差 (P50/P90) を見るのが定石で、 需要が極端に少ない品目では MAPE が見かけ上肥大化する罠を避けるため WAPE をメインにする現場も多い。 SSDSE-B-2026 で県別人口を予測する場合、 全県が正の値なので MAPE が使えるが、 東京 (1409 万人) と鳥取 (54 万人) の予測誤差を均等扱いするか否かで MAPE / WAPE のどちらが「実態に近い」かが変わる。
場面 主指標 併記指標 避けるべき
需要予測 (0 を含む) WAPE SMAPE MAPE (発散)
県別人口予測 MAPE MAE RMSE 単独 (東京が支配)
在庫過剰回避が重要 Pinball (非対称) MAPE 対称な MAE
複数モデルを論文で比較 MASE (季節基準) SMAPE MAPE 単独 (スケール依存)