はじめに
母の日、父の日、お中元、クリスマス、バレンタイン。ECを運営していると、特定の時期に「ギフト用途」の注文がぐっと増える瞬間があります。普段はほとんど動かない商品が、イベントの前だけ急に売れる、というのもよくある話です。
このギフト需要は、なんとなく「毎年このあたりが忙しい」という肌感覚では把握できます。ただ、肌感覚のままだと発注のタイミングを外しやすく、「人気商品が肝心のイベント直前に欠品した」「逆に仕入れすぎて売れ残った」という失敗につながりがちです。
そこで役に立つのが、GA4 の行動データを BigQuery に蓄積して、ギフト関連の購買を時系列で並べてみることです。すでに GA4 と BigQuery を連携しているなら、追加のツールを入れなくても、SQL を数本書くだけでギフト需要の波が見えてきます。
この記事では、ギフト関連の購買を時系列で抽出する方法と、その結果をどう在庫計画に反映するかの考え方を、中小ECの現場目線で整理します。なお、本格的な「予測」については後半で別記事に接続します。
ギフト需要を時系列で見るとは
まず前提を整理します。ここでやりたいのは、次の2つです。
- ギフト用途に関係しそうな購買を抽出する
- それを日次・週次といった時間軸に並べて、いつ需要が立ち上がるかを見る
GA4 のデータは、BigQuery にエクスポートすると events_* という日付別のテーブル群に入ります。1行が1イベント、purchase イベントには注文金額や商品情報がぶら下がっている、という構造です。この構造を理解しておくと、抽出のSQLが書きやすくなります。
「ギフト用途」をどう定義するかは、ストアの作りによって変わります。代表的なのは次のような手がかりです。
- ラッピングやのし、メッセージカードといったギフトオプションが選ばれている
- ギフト向けカテゴリやギフト特集ページ経由で購入されている
- 「母の日」「お歳暮」などギフト系キーワードで流入している
このうち、どれを使えるかはストアの計測設計に依存します。たとえばギフトオプションをカートのカスタム項目として GA4 に送っていれば、それが一番確実な手がかりになります。送っていない場合は、商品名やカテゴリ名、流入元から推測することになります。
完璧な定義を最初から作る必要はありません。まずは取れる手がかりで「ギフトっぽい購買」をざっくり拾い、後から精度を上げていく方針で十分です。最初の集計で出てきた商品リストを眺めて、「これはギフトではないな」というものを除外していくと、条件が自然と磨かれていきます。
ギフト関連の購買を時系列で抽出する
ここでは、商品アイテム名やカテゴリに「ギフト」「ラッピング」などのキーワードを含む購買を、日次で集計する例を考えます。GA4 の purchase イベントは、商品情報が items という配列に入っているため、UNNEST で展開してから条件を当てます。
⚠️ 注意:
UNNEST(items)で展開すると1注文が商品の行数ぶんに増えるため、注文数は必ずCOUNT(DISTINCT ecommerce.transaction_id)で数えます。COUNT(*)だと商品行数ぶん水増しになります。
-- ギフト関連の購買を日次で集計する
SELECT
PARSE_DATE('%Y%m%d', event_date) AS purchase_date,
COUNT(DISTINCT ecommerce.transaction_id) AS gift_orders,
SUM(item.quantity) AS gift_items,
SUM(item.item_revenue) AS gift_revenue
FROM
`your_project.analytics_123456789.events_*`,
UNNEST(items) AS item
WHERE
_TABLE_SUFFIX BETWEEN '20250101' AND '20251231'
AND event_name = 'purchase'
AND (
REGEXP_CONTAINS(item.item_name, r'ギフト|ラッピング|のし|プレゼント')
OR REGEXP_CONTAINS(item.item_category, r'ギフト|贈答|お祝い')
)
GROUP BY
purchase_date
ORDER BY
purchase_date
ポイントは _TABLE_SUFFIX で対象期間を絞っていることです。GA4 のエクスポートは日付別テーブルなので、ここを指定しないと全期間をスキャンしてしまい、スキャン量つまり費用がふくらみます。分析したい期間だけを指定するのが基本です。
抽出条件のキーワードは、自分のストアの商品名やカテゴリ名に合わせて調整してください。ギフトオプションを別のパラメータで持っている場合は、そのパラメータを条件に加えると、より正確に「ギフト用途の購買」を拾えます。
週次にならして波を見やすくする
日次のままだと、土日や特売の影響でギザギザして波が読みづらいことがあります。イベント単位の動きを見たいときは、週次にならすと傾向がつかみやすくなります。
-- 日次の結果をさらに週次に集計する
WITH daily AS (
SELECT
PARSE_DATE('%Y%m%d', event_date) AS purchase_date,
COUNT(DISTINCT ecommerce.transaction_id) AS gift_orders
FROM
`your_project.analytics_123456789.events_*`,
UNNEST(items) AS item
WHERE
_TABLE_SUFFIX BETWEEN '20250101' AND '20251231'
AND event_name = 'purchase'
AND REGEXP_CONTAINS(item.item_name, r'ギフト|ラッピング|のし|プレゼント')
GROUP BY
purchase_date
)
SELECT
DATE_TRUNC(purchase_date, WEEK(MONDAY)) AS week_start,
SUM(gift_orders) AS weekly_gift_orders
FROM
daily
GROUP BY
week_start
ORDER BY
week_start
DATE_TRUNC で週の頭にそろえてから合計すると、週ごとの注文件数が並びます。これを Looker Studio などで折れ線にすると、母の日やクリスマスといったイベントに向けて需要が立ち上がる様子が、ひと目で分かるようになります。
イベント期のピークと前倒し発注の考え方
時系列を眺めると、ギフト需要には特徴的な形があります。イベント当日に向けて少しずつ件数が増え、直前で山を作り、当日を過ぎるとすっと落ちる、という形です。
ここで在庫計画に効いてくるのが、「ピークは何日前か」「立ち上がりは何週間前から始まるか」という読み取りです。たとえば母の日のギフトなら、当日より少し前の週に注文が集中する傾向が見られることがあります。お歳暮のように、早期割引で前倒しになる商習慣があるカテゴリでは、立ち上がりがさらに早まることもあります。
この「いつから増え始めるか」が分かると、発注の段取りが組みやすくなります。具体的には、次のような逆算の流れになります。
- ピーク週の在庫が切れないよう、立ち上がりより前に入荷が間に合う発注日を逆算する
- 仕入れのリードタイム(発注から入荷までの日数)を加味して、発注の締め切りを決める
- ピークを過ぎたら早めに追加発注を止め、売れ残りのリスクを抑える
たとえばピークが特定の週で、仕入れのリードタイムが2週間なら、その週に十分な在庫があるためには、少なくとも数週間前には発注を終えておく必要がある、という具合に段取りが見えてきます。商品ごとにピーク時期もリードタイムも違うので、時系列を商品カテゴリ別に分けて見ると、より細かく発注計画を立てられます。
去年の同じ時期の時系列があれば、それを下敷きにして「今年はそろそろ立ち上がる週だ」と前倒しで構えられます。肌感覚で「そろそろかな」と動くより、過去の波という根拠を持って動けるのが大きな違いです。
なお、前倒し発注はキャッシュフローや保管コストとのバランスでもあります。早く仕入れれば欠品は防ぎやすい一方、在庫を抱える期間は長くなります。時系列から読み取った立ち上がり時期は、あくまで判断材料の一つとして使うのが現実的です。
予測は別記事へ
ここまでは「過去のギフト需要を時系列で見える化する」ところまでです。実際には、「来年のこの時期はどれくらい出るか」を数字で見積もりたい、という話になっていきます。
過去の波をもとに将来の値を推定するのが時系列予測です。BigQuery には、SQL だけで時系列予測ができる仕組みが用意されているので、本記事で作ったギフト需要の時系列データをそのまま入力に使えます。具体的な手順は BigQuery MLのARIMA_PLUSでEC売上の週次予測を自動化する記事 で解説しています。本記事の集計結果を学習データに差し替えれば、ギフト需要の予測にも応用できます。
予測の話に進む前に、まずは本記事のように「過去の波をきれいに並べる」ことが土台になります。土台のデータがあいまいだと、その上に乗せる予測もあてになりません。
季節性とノイズには注意する
ギフト需要の時系列を扱うとき、いくつか気をつけたい点があります。
まず季節性です。ギフト需要はイベントに強く連動するため、1年を通して見ると同じような山が毎年繰り返されます。逆に言うと、イベント直後の落ち込みを「売上が悪化した」と早とちりしないことが大切です。前年の同じ時期と比べて初めて、本当に伸びているのか落ちているのかが分かります。
次にノイズです。単発のセールやSNSでの話題、たまたま入った大口の法人注文などで、特定の日だけ件数が跳ねることがあります。こうした一時的な山を「毎年起きる需要」と取り違えると、過剰な仕入れにつながります。週次にならす、複数年で見比べる、極端な外れ値は中身を確認する、といった目を持っておくと判断を誤りにくくなります。
最後に、抽出条件そのものの限界です。キーワードでギフト用途を拾う方法は手軽ですが、ギフトなのに条件に引っかからない購買や、自宅用なのにギフト判定されてしまう購買が混じります。数字は「だいたいの傾向」として受け止め、過度に細かい桁まで信用しないのが安全です。
在庫を抱えすぎないという観点では、ギフト以外の通常在庫の動きも合わせて見ておきたいところです。回転していない在庫の見つけ方は GA4とBigQueryで売れ残り在庫を見つける記事 にまとめています。ギフト需要の山だけでなく、動いていない在庫の谷も同時に把握できると、仕入れ全体の判断がしやすくなります。
まとめ
ギフト需要は、時期によって大きく動くわりに、肌感覚だけで対応しがちな領域です。GA4 の行動データを BigQuery で時系列に並べると、その波が数字としてはっきり見えてきます。
- ギフトっぽい購買を、まずは取れる手がかりでざっくり抽出する
- 日次だけでなく週次にならして、需要の立ち上がりとピークを読む
- ピークから逆算してリードタイムを踏まえた発注計画につなげる
- 季節性とノイズに注意し、数字を「だいたいの傾向」として扱う
時系列をきれいに並べることは、その先の予測の土台にもなります。まずは過去のギフト需要を見える化するところから、在庫計画の精度を一段上げていきましょう。