加重移動平均計算機
重みの並びをずらしながら、順序のある系列をなめらかにします。重みが1、2、1なら各窓は3個の値を含み、中央の値が2倍に数えられ、合計を4で割ります。5個の値から3個の平均が出ます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 系列
- 10, 20, 30, 40, 50
- 重量
- 1, 2, 1
- 加重移動平均
- 20, 30, 40
- ウィンドウサイズ
- 3
- 窓
- 3
- 重みの合計
- 4
加重移動平均は、順序付き系列を平滑化しながら、各窓内の特定位置をより重視できる統計量です。観測値の系列と固定の重み配列を指定すると、その重みパターンを系列の先頭から末尾まで移動させます。完全な窓ごとの加重平均に加え、窓の大きさ、窓の数、重みの合計を返します。計算は決定的で、すべての数値を検証し、空の重みや系列より長い重み配列は明確なエラーとして拒否します。
加重移動平均の仕組み
移動平均は、連続する窓を順番に評価して、長い順序付き系列を短く滑らかな系列へ変換します。この計算機では、重み配列の長さが窓の長さにもなります。完全な各窓について、最初の観測値に最初の重み、2番目の観測値に2番目の重みを掛け、以後も同様に対応させます。
積を合計し、すべての重みの合計で割ると、その窓の結果になります。その後、同じ重みパターンを観測値1個分だけ前へ移動して、計算を繰り返します。観測値が5個、重みが3個なら、位置1から3、位置2から4、位置3から5に対応する3個の結果が得られます。
重みは位置に対応するため、この並び方が重要です。系列が古い順から新しい順なら、1、2、3という重みは新しい値を強く反映し、3、2、1なら古い値を強く反映します。すべて同じ重みにすると、同じ窓幅の単純移動平均になります。
完全な窓だけを返し、端を埋める値の追加、境界値の反復、不完全な窓の出力は行いません。
重みの選び方と安定した利用方法
重みは合計を1にするためだけではなく、各位置に持たせたい影響力に基づいて選んでください。この計算機は必ず重みの合計で割るため、1、2、1と10、20、10のような比例する配列は同じ平均を生成します。古い順から新しい順の系列で直近の値を重視する場合、通常は右側ほど大きな重みにします。
中央を重視した平滑化には、対称の重みを利用できます。変化へすばやく反応させる場合は短い窓、一時的な変動を強く抑える場合は長い窓が適しています。他のパッケージと比較する前に、その規則をご確認ください。
重みの順序を逆にするもの、正規化済みの重みを要求するもの、端を補完するものがあります。この機能は指定された重みを左から右へそのまま適用し、完全な窓だけを返します。
活用例
直近のセンサー値を平滑化
新しい値を重視する短いパターンを適用し、温度、負荷などの順序付き測定値の変化を保ちながらノイズを減らします。
業務トレンドを追跡
日次需要、問い合わせ件数、処理量を、ダッシュボードや警告に適した安定した移動指標へ変換します。
窓統計の学習
窓幅、位置ごとの重み、正規化によって、単純移動平均と比べて系列がどう変わるかを示します。
よくある質問
結果はいくつ返されますか?
完全な窓だけを計算するため、結果数は系列の長さから重みの長さを引いて1を足した値です。
最新の観測値には最初と最後のどちらの重みが対応しますか?
重みは左から右へ適用します。系列が古い順から新しい順の場合、各窓の最新値には最後の重みが対応します。
重みの合計を1にする必要がありますか?
いいえ。 各加重和を総重量で割るため、合計がゼロでない比例した重み配列なら、同じ正規化結果になります。
系列の最初と最後はどう扱われますか?
値を補ったり推測したりはしません。完全な窓だけを平均するので、最初の結果は最初にそろった窓のもので、両端に途中までの平均は出ません。
重みがすべて同じなら単純移動平均と同じですか?
同じです。重みがすべて等しいと、各窓の結果はその値の単純平均になり、同じ窓の長さの単純移動平均と一致します。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/stat/weighted-moving-average \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"series":[10,20,30,40,50],"weights":[1,2,1]}'const res = await fetch("https://api.kit.forhosting.com/stat/weighted-moving-average", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"series": [
10,
20,
30,
40,
50
],
"weights": [
1,
2,
1
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/stat/weighted-moving-average",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"series": [
10,
20,
30,
40,
50
],
"weights": [
1,
2,
1
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/stat/weighted-moving-average", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"series":[10,20,30,40,50],"weights":[1,2,1]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"series":[10,20,30,40,50],"weights":[1,2,1]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/stat/weighted-moving-average", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"series": [
10,
20,
30,
40,
50
],
"weights": [
1,
2,
1
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "stat.weighted_moving_average",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_series_items | 100000 |
max_weights | 10000 |
max_operations | 10000000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
入力の準備と出力の読み方
観測値の順序を変えるとすべての窓が変化するため、series は元の順序を保つ必要があります。加重和を重みの合計で割るため、合計をゼロにすることもできません。個々の負の重みやゼロの重みは数学的な係数として利用できますが、一般的な平滑化では非負の重みを使います。最初の要素は最初の完全な窓に対応し、その後の要素では窓が正確に1位置ずつ進みます。標準の JavaScript 数値演算を使用するため、会計などで固有の小数規則が必要な場合は、用途に合った方針で結果を丸めてください。series と weights という2つの配列を送信してください。weights には有限数を1個以上含め、series より長くしないでください。すべての要素を有限の JSON 数値として検証し、配列の欠落、文字列、null、NaN に相当する値、無限大は暗黙に変換せず拒否します。weighted_moving_average フィールドには、窓の時系列順で結果が格納されます。応答には window_size、windows、weight_sum も含まれるため、位置合わせと正規化を確認できます。結果数は series の長さから weights の長さを引いて1を足した値です。
重みの選び方と安定した利用方法
無料のブラウザー版では端末内で動作し、API でも同じ純粋な計算を使い、成功した項目ごとに $0.002 がかかります。ネットワークサービス、モデル、時計、乱数源を使用しないため、同じ JSON からは常に同じ結果が得られ、テスト、ダッシュボード、教材、分析パイプラインに適しています。
技術的な質問
各窓ではどの式を使いますか?
series[start + i] と weights[i] の積を合計し、その値を重みの合計で割ります。
どのような入力がエラーになりますか?
配列の欠落や空配列、有限でない数値、系列より長い重み、ゼロの重み合計、公開上限を超える計算は invalid_input になります。
API の料金はいくらですか?
成功した API リクエストごとに $0.002 がかかります。ブラウザー計算機はお使いの端末で無料実行できます。