ひとりマーケティングのためのデータ分析

TOOLS / FORECASTING

過去の「似た動き」から次期を予測する、
Excelで実践する最近隣法のアプローチ。

直近のパターンに似た過去を探し、その先の値をウエイト付きで合成する。

2026/4/26

晴花

HARUKA

直近のパターンに似た過去を探して、その先に何があったかを参照する。"似ている"の定義がユークリッド距離——これがこの手法の面白いところ。

最近隣法とは

ナイーブ予測の単純さを踏襲しつつ、「直前の実測値をそのまま充てる」のではなく、直近のパターンに類似した過去のパターンを探し、その後に続く値を重みづけして合成した値を予測値とする手法です。

パターン検索
直近 2 期の値が作る「形」に似た過去の事例をユークリッド距離で探す
ウエイト合成
距離が近いほど重みを大きく(逆数)、採用した上位 k 件の次期値を加重平均して予測値を得る
この手法の位置づけと制限

「ナイーブ」は英語圏のネガティブなニュアンスをそのまま含む言葉です。他の手法(移動平均法指数平滑法)と同様、シャープな論理性を要求する予測には薄弱です。しかし、最近隣法には直近に現れた形と過去の形を照合しつつ「パターンを探す」という直感に沿ったわかりやすい発想があります。

制限として、計算に使う実測値の最大・最小を超える予測値は出せません。

このページでは、ある販売担当部員の直近 24 か月の売上データから 25 期目(9 月)の売上予測値を求めます。採用するパターン数(採用期数)は初期値 6 で、後から変更可能な設計にします。

01

元データ

ある販売担当部員の直近 24 か月の月別売上を集計したデータです。「期」列はデータ数を把握しやすくするための補助列で、処理上は必須ではありません。このデータから 25 期目(9 月)の売上予測値を求めるのが目的です。

元データ:24か月分の月別売上(最近隣法)
02

直近のパターンに似た過去のそれを探る

「売上」列の右隣から順に以下の見出しを追加します。これらは計算プロセスを段階的に分類した列です。

  • 2 期前の売上
  • 1 期前の売上
  • 距離
  • 距離の逆数
  • 順位
  • ウエイト
  • 売上×ウエイト
7列の見出しを追加

「2 期前の売上」「1 期前の売上」の両列を、3 期目から「売上」列を転記する式で入力します。両列の式を表の最下行より 1 行はみ出るところまでコピーします。

[セルD4]=C2、[セルE4]=C3。D26・E26までコピー

さて「距離」列の式は図のような構造を用意していきます。

晴花

「距離」はユークリッド距離——2 期前と 1 期前の値がつくる"形"と、過去の各時点の"形"との直線距離。値が小さいほど直近パターンに近しい。

「距離」計算式の構造(ユークリッド距離)

これは図の直近パターン(赤い線)ライクな動きを探しています。

直近パターン(赤い線)の可視化

イメージとしては直前の赤い線の両端に図の上段のように線を引き、左端から順にそれらから売上までの距離をペアで走査していきます(図の中段)。このとき,黒い線がその「距離」を示します。

この距離は向きが異なると足し合わせた際に相殺されてしまうので、図の下段のような黒い正方形の面積を考えます。これを足し合わせたものがどれだけ小さいかで、先のパターンと近しいことを見当づけることができます。

最後にルートをとって単位を戻したものが「距離」です。

直近の各値に水平線を引く
直近パターンと過去の各時点を照合するイメージ
距離を測る
距離を2乗して合計するイメージ(方向による相殺を防ぐ)
距離を 2 乗する
ルートをとって単位を戻す

では具体的に 3 期目のセルから式を入力し、「1 期前の売上」列の最下行と同じ行までコピーします。

  • =SQRT(($D$26-D4)^2+($E$26-E4)^2)
[セルF4]=SQRT(($D$26-D4)^2+($E$26-E4)^2)。F26までコピー

「距離の逆数」列を計算します。距離が小さいほど重みを大きくするため逆数をとります。3 期目から 24 期の行までコピーします。

1 ÷ 距離

  • =1/F4
[セルG4]=1/F4。G25までコピー

「順位」列を計算します。距離の昇順でランクを付けます。ランクの対象範囲に距離がゼロのセルは含めません。

  • =RANK(F4, $F$4:$F$25, 1)
SEE BELOW — 関数

より厳密には同順位対策も必要となりますが、実務的には希と思われることから RANK 関数で処理しています。

[セルH4]=RANK(F4,$F$4:$F$25,1)。H25までコピー
03

候補より "次に測定された値" を拾って合成する

表の右端に 採用期数 と初期値 6 を入力します(セル L1, L2)。

[セルL1]採用期数、[セルL2]初期値6を入力

採用期数をもとに次の処理を行います。①順位の昇順で採用期数分のレコードを特定し、②該当レコードの売上に重みを掛けて合成します。

予測値の計算のしくみ(上位k件を特定→次期値を加重平均)

「ウエイト」列を計算します(初期状態では何も表示されませんが正常な処理です)。

  • =IF(H4<=$L$2, G4/SUMIF($H$4:$H$25, "<="&$L$2, $G$4:$G$25), "")
SEE BELOW — 関数
ウエイトの計算式を入力(順位が採用期数以下なら逆数を按分)

式の構造は下図のとおり——「順位」が採用期数以下なら距離の逆数を按分してウエイトを算出し、そうでなければ空白処理します。

「ウエイト」計算式の構造

「売上×ウエイト」列を計算します。ウエイト列にデータがない行ではエラーが発生するため IFERROR 関数でガードします(初期状態では何も表示されませんが正常な処理です)。

  • =IFERROR(C4*I4, "")

IFERROR 関数 — "Office")

[セルJ4]=IFERROR(C4*I4,'')。J25までコピー

「期」「月」列の最終行の 1 つ下に「25」「9 月」を入力します。

25期・9月の行を追加

25 期目の「売上」列に、「売上×ウエイト」列の上方 3 行を除く全範囲を合計する式を入力します。

  • =SUM(J4:J25)

この値を 25 期目の予測値と見立てます。実測値との混同を防ぐため、背景色やフォント色で区別しておくことを推奨します。

[セルC26]=SUM(J4:J25)(25期目の予測値)

最近隣法による次期予測が完成しました。

最近隣法による売上予測の完成
04

任意の期数に変更する

セル L2 の採用期数を変えると、ウエイト・予測値がすべて連動して更新されます。下のグラフは採用期数に応じた誤差をプロットしたものです。今回採用した 6 期付近でこの例における誤差の最小水準にほぼ到達しており、「6」の妥当性が裏付けられます。

晴花

採用期数を変えるとウエイト・予測値が連動する。「何期採用すべきか」は先期データで誤差を検証して判断する——移動平均法の区間選択と同じ発想。

採用期数に応じた誤差グラフ(先期データ):6期付近で最小水準

もう 1 期前(7 月)での同様の検証と、両月を重ねたグラフです。7 月は 8 月より少ない期数で誤差の最小水準に達する一方、期数「6」ではその前後より 1〜1.5 ポイント誤差が上昇しました。これらの検証から、この例では 6 を含む前後の期数の選択と相性がよいことが示唆されます。

7月・8月の誤差を重ね合わせたグラフ

晴花