平均絶対パーセント誤差(MAPE)計算機
平均絶対パーセント誤差計算機は、順序をそろえた観測値の配列と同じ長さの予測値の配列を比較し、絶対パーセント誤差の平均を返します。MAPEは誤差を割合で表すため、規模が異なる予測でも説明しやすい指標です。対応する値を同じ順序で入力すると、パーセント値と評価したペア数が得られます。観測値がゼロの場合は分母がゼロとなり割合を定義できないため、誤解を招く結果を返さず入力エラーとして扱います。
無料で実行
観測値と予測値の順序をそろえます
同じ事象を同じ順序で表す2つの配列を準備してください。最初の観測値は最初の予測値に、2番目の観測値は2番目の予測値に対応させます。両方の配列は同じ長さで、少なくとも1つの有限数を含み、公開されている上限以内である必要があります。観測値は分母になるためゼロにできません。予測値は、対象データとして妥当であればゼロや負数でも構いません。null、空文字列、文字列形式の数値、Infinity、NaNは使用せず、有限のJSON数値だけを指定してください。単位も必ず統一します。円単位の実績と千円単位の予測を比較すると、結果に意味がなくなります。配列はobservedとpredictedに渡します。応答のmapeはパーセント、countは評価したペア数です。
パーセントの計算方法を理解します
各ペアについて、観測値から予測値を引き、その差の絶対値を標準式に従って観測値で割ります。すべての比率を平均し、結果に100を掛けます。したがってmapeが8.5なら、予測は観測値から平均で8.5パーセント外れたことを示しますが、過大予測か過小予測かは残りません。絶対値を使うことで、正負の誤差が相殺されるのを防ぎます。値の大きさにかかわらず各ペアの重みは同じなので、小さな観測値が非常に大きなパーセント誤差を生む場合があります。計算は決定的な浮動小数点演算で、丸めません。表示や報告に適した桁数は利用者側で選択できます。countを確認すれば、計算に含まれたペア数を検証できます。
MAPEを用途に合わせて解釈します
MAPEは、観測値がゼロではなく、意味のある比率尺度を共有し、割合の差が分析目的に合う場合に特に有効です。需要、アクセス数、売上、在庫などの予測で広く使われます。期間や商品構成を変えると値が大きく動くため、同じ方法で準備したデータセットだけを比較してください。ゼロに近い観測値では、小さな絶対誤差でも平均を支配するほど大きな割合になるので注意が必要です。負の観測値も数学上は受け付けますが、符号に業務上の意味がある場合は解釈しにくくなります。MAPEだけでは偏り、時系列パターン、誤差分布は分かりません。過大予測が重要なら符号付き指標を併用し、ゼロが多い場合はMAE、RMSE、WAPEや分野固有の指標をご検討ください。APIは1リクエスト$0.002で、無効な入力を明示的に拒否します。
活用例
需要予測を評価します
週次の予測需要とゼロではない販売実績を比較し、平均誤差をパーセントで共有します。
モデルの版を監視します
候補モデルに同じ指標を適用し、割合精度が改善しているか追跡します。
計画見積もりを確認します
予算、アクセス数、処理能力の見積もりが最終実績にどれほど近かったか測定します。
よくある質問
返されるMAPEの値は何を意味しますか?
平均絶対パーセント誤差です。値が7なら、平均絶対誤差が7パーセントであることを示します。
観測値がゼロだと拒否されるのはなぜですか?
各パーセント誤差は観測値で割ります。ゼロ除算は定義できないため、入力全体を拒否します。
2つの配列は同じ長さでなければなりませんか?
はい。各観測値には対応する予測値が1つ必要で、長さが違う入力は無効です。
計算結果は丸められますか?
いいえ。決定的な浮動小数点結果を返すため、用途に合う表示桁数を選択できます。
観測値に負数を使えますか?
はい。有限の負数を使用できますが、符号に固有の意味がある分野ではMAPEの解釈が難しくなります。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/stat/mape-error \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"observed":[100,200,50,400],"predicted":[110,190,55,360]}'const res = await fetch("https://api.kit.forhosting.com/stat/mape-error", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"observed": [
100,
200,
50,
400
],
"predicted": [
110,
190,
55,
360
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/stat/mape-error",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"observed": [
100,
200,
50,
400
],
"predicted": [
110,
190,
55,
360
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/stat/mape-error", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"observed":[100,200,50,400],"predicted":[110,190,55,360]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"observed":[100,200,50,400],"predicted":[110,190,55,360]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/stat/mape-error", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"observed": [
100,
200,
50,
400
],
"predicted": [
110,
190,
55,
360
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "stat.mape_error",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_items | 100000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |