Media > AI活用ユースケース > 経営企画 > 店舗の日次売上から月の途中で月末の着地を店舗ごとに見込み、予算との差と理由の候補を経営企画に出す

店舗の日次売上から月の途中で月末の着地を店舗ごとに見込み、予算との差と理由の候補を経営企画に出す

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

店舗ごとの日次売上から、月の途中で月末の売上の着地と見込みの幅を計算します。予算との差が大きい店舗には、客数・客単価・部門別の数字から理由の候補と、店長に確かめる点を付けて経営企画に出します。

サマリー
生成AI
ChatGPT/Claude/Gemini
連携・自動化
Google Apps Script/Make/Power Automate/Python
対象業界
小売/飲食
対象部門
経営企画
対象業務
集計・分析
主な課題
データ分析に時間がかかる/判断に時間がかかる/属人化している
AIで行う処理
予測
主な効果
判断支援/対応スピード向上/工数削減
導入難易度
★★★☆☆
実装レベル
半自動化
費用感
API連携(中)
人間の確認
条件付き
現在工数
30h/月
AI導入後
10h/月
想定削減
67%
年間削減
240h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 朝、POSから前日までの店舗別・日別のCSVを出し、集計のスプレッドシートに貼り付ける
  2. 店舗ごとに当月の実績の累計を出す
  3. 担当者のやり方で、月末までの残りの日の売上を見込み、累計に足す
  4. 予算と比べ、差の大きい店舗に色を付ける
  5. 差の大きい店舗について、客数・客単価・部門別の前年比を開いて見る
  6. 販促の予定と店舗からの報告を見比べ、理由のコメントを書く
  7. 一覧を地区の責任者と営業部長にメールで送る
導入後(After)
  1. 自動毎朝、POSのCSVが共有ドライブのフォルダに置かれる(POSの仕組みの夜間の出力)
  2. 自動スクリプトがCSVを読み、店舗別・日別の売上・客数・部門別売上を蓄積のシートに足す
  3. 自動10日・15日・20日・25日の朝は、店舗ごとに着地の見込みを決まった式で計算する
  4. 自動過去12か月の同じ時点での見込みのずれから、店舗ごとの見込みの幅を計算する
  5. 自動予算との差と幅から、店舗を「予算が幅の外で下」「幅の中」「幅の外で上」に分ける
  6. 自動「幅の外」の店舗について、客数・客単価・部門別の前年比と販促の予定を Gemini API に渡す
  7. 自動理由の候補(数字の根拠付き)と、店長に確かめる点が返る
  8. 自動見込みの一覧のシートに書き出し、経営企画の Google Chat のスペースに知らせる
  9. 人経営企画の担当者が一覧を確かめ、理由の候補を直したり消したりする
  10. 人地区の責任者と営業部長に一覧を送る
  11. 自動月末に、各時点の見込みと実際の着地を並べて、見込みのずれを記録する
各工程の詳しい説明を読む
  1. 朝、POSから前日までの店舗別・日別のCSVを出し、集計のスプレッドシートに貼り付ける
  2. 店舗ごとに当月の実績の累計を出す
  3. 担当者のやり方で、月末までの残りの日の売上を見込み、累計に足す
  4. 予算と比べ、差の大きい店舗に色を付ける
  5. 差の大きい店舗について、客数・客単価・部門別の前年比を開いて見る
  6. 販促の予定と店舗からの報告を見比べ、理由のコメントを書く
  7. 一覧を地区の責任者と営業部長にメールで送る

(a)計算の仕方が担当者ごとに違う。 「前年比 × 前年の月」と「1日平均 × 日数」では、曜日の並びの違いを拾えるかが違います。月の中で土日が1日多いだけで、食品スーパーの月の売上は目に見えて変わります。 担当者が替わると、見込みの癖も変わります。

(b)見込みに幅が無い。 「着地は予算比98%」とだけ出すと、その98%がどのくらい確かなのかが分かりません。 毎月ぶれが大きい店舗と、15日時点でほぼ着地が読める店舗が、同じ1つの数字で並びます。

(c)理由を探すのが差の大きい店舗だけになる。 75店舗すべての部門別の数字を開く時間は無く、理由のコメントが付くのは上位の数店舗です。 差は小さいが毎月じわじわ下がっている店舗は、月末まで話題になりません。

(d)月末近くにならないと動けない。 25日の一覧で初めて理由が分かっても、残りの5日で打てる手はほとんどありません。 10日や15日の時点で理由の候補が出ていれば、店長と話す時間が取れます。

  1. 【自動】 毎朝、POSのCSVが共有ドライブのフォルダに置かれる(POSの仕組みの夜間の出力)
  2. 【自動】 スクリプトがCSVを読み、店舗別・日別の売上・客数・部門別売上を蓄積のシートに足す
  3. 【自動】 10日・15日・20日・25日の朝は、店舗ごとに着地の見込みを決まった式で計算する
  4. 【自動】 過去12か月の同じ時点での見込みのずれから、店舗ごとの見込みの幅を計算する
  5. 【自動】 予算との差と幅から、店舗を「予算が幅の外で下」「幅の中」「幅の外で上」に分ける
  6. 【自動】 「幅の外」の店舗について、客数・客単価・部門別の前年比と販促の予定を Gemini API に渡す
  7. 【自動】 理由の候補(数字の根拠付き)と、店長に確かめる点が返る
  8. 【自動】 見込みの一覧のシートに書き出し、経営企画の Google Chat のスペースに知らせる
  9. 【人】 経営企画の担当者が一覧を確かめ、理由の候補を直したり消したりする
  10. 【人】 地区の責任者と営業部長に一覧を送る
  11. 【自動】 月末に、各時点の見込みと実際の着地を並べて、見込みのずれを記録する

3番目と4番目をスクリプトの式で行うのが、この設計の土台です。 見込みの金額が毎回同じ式で出るので、担当者が替わっても見込みの癖は変わりません。 式を変えるときは、変えた日と内容を記録します。

9番目で経営企画が見るのは、理由の候補が数字に合っているかです。 理由の候補は、店舗の事情を知らないAIが数字から並べたものです。店長に聞く前の仮説として扱い、確定した理由として地区へ出しません。

02今回想定するシステム構成

構成図
POSの仕組み(夜間に店舗別・日別のCSVを出力)
   ▼ 共有ドライブのフォルダ
【トリガー】時間主導型(毎朝7時台)
Google Apps Script
   ├──▶ CSVを読み、蓄積のシートに足す
   ├──▶(10日・15日・20日・25日)着地の見込みと幅を計算
   ├──▶ 予算と比べ、幅の外の店舗を選ぶ
   ▼
Gemini API(構造化出力)
   │   幅の外の店舗について、理由の候補と確かめる点
   ▼
Google Apps Script ── 見込みの一覧のシートへ書き出す
   └──▶ Google Chat のスペースへ知らせる(Webhook)
   ▼
【経営企画が確かめて、地区の責任者へ送る】
役割想定する製品代替候補
実行環境Google Apps ScriptPower Automate、Make、Python
生成AIGemini API(有料の枠、構造化出力)Claude API、OpenAI API
シートGoogle スプレッドシート(蓄積・予算・販促の予定・見込みの一覧)Microsoft 365 のブック
通知Google Chat(経営企画のスペースへの Webhook)Gmail

新しく足すのは、スクリプトと Gemini API の契約だけです。 POSの仕組みも、予算のスプレッドシートも、今あるものを使います。POSの仕組みには書き込みません。 スクリプトが書き込むのは、蓄積のシートと見込みの一覧のシートだけです。

土台になるのは、Google Apps Script の時間主導型のトリガーです。 毎分から毎月までの間隔で関数を動かせ、インストール型トリガーは作成した人のアカウントで実行されます。 共有ドライブとスプレッドシートは、そのアカウントの権限で読み書きします。

スクリプトの実行時間には上限があります。 1回の実行は6分まで、トリガーの合計の実行時間は Google Workspace のアカウントで1日6時間まで、外部の API の呼び出しは1日100,000回までとされています。75店舗の見込みの計算と、幅の外の店舗についての Gemini API の呼び出しを1回の実行に詰めると、6分に近づく日があります。 第7章で処理を分ける方法を書きます。

知らせには、Google Chat の受信 Webhook を使います。 外部からスペースへ一方向に投稿する仕組みで、投稿はスペースあたり毎秒1回までの上限があります。知らせは1回の処理で1件にまとめます。

03どうやって実装するのか

Step1

処理の起点を決める

時間主導型のトリガーを毎朝7時台に1つ置きます。 POSの夜間の出力が終わったあとに動くよう、出力の終わる時刻を確かめて決めます。時間主導型のトリガーは、指定した時間帯の中で動く時刻が少しずれます。

毎朝やるのは、CSVの取り込みだけです。 見込みの計算と Gemini API の呼び出しは、10日・15日・20日・25日の朝だけ行います。その4日が土日に当たる場合も、曜日にかかわらず同じ日に動かします。 地区の責任者が週明けに一覧を見る運用でも、計算の時点はそろえておきます。

見込みを出す日は、処理を3つに分けます。 7時台に取り込み、7時半からの実行で75店舗の見込みと幅を計算し、8時からの実行で幅の外の店舗について Gemini API を呼びます。どこまで終わったかをスクリプト プロパティに残し、6分を超えそうなら次の実行で続きから始めます。

CSVが届いていない朝は、見込みを出しません。 前日分が欠けたまま計算すると、累計が1日分少なくなり、全店舗が予算に届かない側に振れます。 届いていなければ、Chat に「CSV未着」とだけ知らせて止まります。

Step2

入力データを集める

データ中身取得元
日次の実績店舗コード、日付、売上、客数、部門別売上(青果・精肉・鮮魚・惣菜・日配・一般食品・日用品)POSのCSV(共有ドライブ)
前年の日次の実績同じ項目の前年分蓄積のシート
予算店舗別・月別の売上予算予算のスプレッドシート
販促の予定日付、店舗または地区、チラシ・ポイント倍の日・特売の別販促の予定のシート
店舗の事情改装による休業、営業時間の変更、近くの競合の出店などのメモ地区の責任者が書く店舗メモのシート

AIに渡すのは、幅の外の店舗の数字と、販促の予定と、店舗メモだけです。 生の日次の実績をすべて渡すことはしません。スクリプトが前年比や構成比に計算し直したものを渡します。

店舗メモが、理由の候補の質を決めます。 「15日から近くにドラッグストアが開店」と書いてあれば、AIは日用品の前年比の落ち込みと結び付けられます。メモが無ければ、AIは数字の動きしか言えません。 メモに無い外の事情を、AIに推測させることはしません。

Step3

データの取得方法を決める

POSのCSVは、共有ドライブのフォルダから読みます。フォルダの中のファイルを一覧にし、未処理のものを開いて中身を文字列として取り出します。POSの仕組みが出すCSVの文字コードがUTF-8でない場合は、文字コードを指定して取り出します。 Blob から文字列を取り出すときに文字コードを指定できます。取り出した文字列は、CSVを2次元の配列にする関数(Utilities.parseCsv)で表の形にします。

取るものどこから何に使うか
前日分の実績POSのCSV蓄積のシートに足す
今月の実績の累計蓄積のシート着地の見込みの土台
前年の同じ曜日並びの日の実績蓄積のシート(364日前)残りの日の見込み
過去12か月の各時点の見込みと実際見込みの記録のシート見込みの幅
予算・販促・店舗メモ各シート比較と、AIへの文脈

前年の日は「364日前」で取ります。 364日はちょうど52週なので、曜日が必ずそろいます。 前年の同じ日付で取ると曜日がずれ、土日の数の違いがそのまま見込みの誤差になります。

取り込んだCSVは、処理済みのフォルダへ移します。 移すのは蓄積のシートへの書き込みが終わったときだけにします。フォルダに残っているファイルの数が、そのまま未処理の数になります。

Step4

AIへ渡す前に整形する

  1. 取り込みの確認 … 前日分が全75店舗そろっているかを数えます。欠けた店舗は「未着」とし、その店舗の見込みは出しません
  2. 異常値の確認 … 売上が0の日、前年比が10倍を超える日に印を付けます。休業日か、POSの不具合かを店舗メモで確かめます
  3. 着地の見込みの計算 … 今月の実績の累計に、残りの日ごとの「364日前の売上 × 補正率」を足します。補正率は、直近14日の実績を、その364日前の14日の実績で割ったものです
  4. 販促のずれの調整 … 前年の364日前がチラシの日で、今年の同じ日がチラシでない場合(またはその逆)は、前年の通常の同じ曜日の平均で置き換えます
  5. 新店・改装店の扱い … 前年の実績が無い店舗は、直近4週の同じ曜日の平均で見込みます。この店舗には「前年なし」の印を付けます
  6. 見込みの幅の計算 … 過去12か月の同じ日付の時点での、見込みと実際の着地のずれの率を店舗ごとに並べ、その中央値と最大を幅にします
  7. 店舗の区分け … 予算が幅の下限より上なら「幅の外で下」、幅の中なら「幅の中」、上限より下なら「幅の外で上」とします
  8. AIへ渡す数字の計算 … 幅の外の店舗について、客数・客単価・部門別売上の前年比と、月の前半と後半の前年比の違いを計算します

3番目から7番目は、すべてスクリプトの式です。 この記事が「予測」と呼んでいるのは、この式で出す着地と幅のことです。式は単純ですが、毎回同じ答えが出ること、過去のずれで確かさを示せることが、担当者の手計算との違いです。

6番目の幅は、運用を始めてから育ちます。 最初の月は過去の見込みの記録が無いため、過去12か月の実績から「その時点で同じ式を使っていたら」の見込みを計算し直して作ります。 蓄積のシートに前年分があれば、さかのぼって計算できます。

Step5

AIに処理させる

させるのは、幅の外の店舗について、予算との差の理由の候補を数字の根拠付きで並べ、店長に確かめる点を書くことです。

させること中身判断できないときの扱い
差の分解の読み取り客数と客単価のどちらの前年比が予算の前提から外れているか両方が小さく動いているだけなら「分解できない」
部門の特定差に効いている部門を前年比と構成比から挙げる部門の動きがそろっていれば「全体的」
時期の特定月の前半と後半で前年比が変わったか変化が無ければ書かない
理由の候補販促の予定と店舗メモに照らした候補を最大3つメモに手がかりが無ければ「数字の動きのみ」
確かめる点店長に聞くべきことを2〜3個—

理由の候補には、必ず根拠にした数字の項目名を付けさせます。 「日用品の前年比が15日以降 82%に落ちた(部門別前年比・後半)」のように、入力のどの数字から言っているかを1つずつ書かせます。 根拠の無い候補は、スクリプトの側で一覧から外します。

させないこと理由
着地の金額や幅の計算・修正式で出した数字を変えさせない
天候・景気・競合など、入力に無い事情の推測確かめようのない理由が一覧に並ぶ
予算の修正の提案予算は経営の判断事項
店舗や店長の評価見込みの一覧の目的と違う
打ち手の決定店長と地区の責任者が決める

2行目がいちばん起きやすい失敗です。 客数が落ちている店舗について、AIは「天候不順の影響と考えられる」と書きがちです。入力に天候の情報が無い以上、それは確かめようのない推測で、一覧に並ぶと事実のように読まれます。 店舗メモに無い外の事情は、「確かめる点」の側に質問として書かせます。

Step6

指示内容を固定する

あなたは小売チェーンの経営企画部で、月の途中の店舗の売上を分析する立場です。
着地の見込みと幅は、すでに決まった式で計算されています。
あなたの役割は、予算との差について、理由の候補と、店長に確かめる点を出すことです。

【入力(店舗ごと)】
- 着地の見込み、見込みの幅、予算、予算との差、区分(幅の外で下/上)
- 客数・客単価の前年比(月の累計、前半、後半)
- 部門別売上の前年比と構成比(月の累計、前半、後半)
- この店舗と地区の販促の予定(今年と前年)
- 店舗メモ(休業、営業時間の変更、近くの出店など)

【してほしいこと】
1. 差が客数と客単価のどちらから来ていそうかを書いてください。
2. 差に効いている部門を、最大3つ挙げてください。
3. 理由の候補を最大3つ、根拠にした入力の項目名と数字を付けて書いてください。
4. 店長に確かめる点を2〜3個、質問の形で書いてください。

【厳守事項】
- 着地の見込み、幅、予算、差の金額を計算し直したり、修正したりしないでください。
- 入力に無い事情(天候、景気、競合の動き、地域の行事など)を、
  理由の候補として書かないでください。必要なら「確かめる点」に質問として書いてください。
- 理由の候補には、必ず evidence に入力の項目名と数字を書いてください。
  evidence を書けない候補は出さないでください。
- 店舗メモに書かれた事情を使うときは、source を "store_memo" にしてください。
- 予算を変えるべきか、店長の対応が良いか悪いかを書かないでください。
- 打ち手を決めないでください。
- 数字の動きが小さく、理由を絞れないときは "no_clear_driver" を true にしてください。

【店舗ごとの入力】{stores}

「入力に無い事情を書かない」と「確かめる点に質問として書く」を対にしているのが要点です。 禁じるだけだと、AIは天候の話を言い換えて別の欄に入れてきます。出口を用意すると、推測は質問の形に落ち着きます。 店長が「その週は大雨でした」と答えれば、それが確かめられた理由になります。

Step7

出力形式を固定する

次の形のJSONで受け取ります。 Gemini API の構造化出力を使い、response_format に mime_type を application/json、schema に下の形のスキーマを入れて渡します。

{
  "store_code": "S041",
  "driver_split": "customers | basket | both | unclear",
  "key_departments": ["日用品", "一般食品"],
  "reason_candidates": [
    {
      "text": "",
      "evidence": [{ "field": "dept_yoy_second_half.日用品", "value": "0.82" }],
      "source": "numbers | store_memo | promo_calendar"
    }
  ],
  "questions_for_store": ["", ""],
  "no_clear_driver": false
}

1つ目の理由は、evidence をスクリプトで照合できることです。 field に書かれた項目名が入力に本当にあり、value が入力の数字と一致するかをスクリプトが確かめます。一致しない候補は一覧から外し、「根拠不一致」として記録します。 構造化出力は JSON の形を守りますが、値の正しさはアプリケーションで確かめるよう、公式の説明にもあります。

2つ目は、source で理由の出どころを分けられることです。 数字の動きだけから言っている候補と、店舗メモや販促の予定に基づく候補では、地区の責任者が受け取る重さが違います。 一覧では source ごとに印を変えます。

3つ目は、no_clear_driver で「分からない」を正式な答えにできることです。 幅の外でも、客数・客単価・部門のどれも小さく動いているだけの店舗があります。無理に理由を作らせず、「はっきりした要因なし」と一覧に出し、店長への質問だけを残します。

Step8

システムへ連携する

つなぎ先方式内容
共有ドライブのフォルダフォルダのファイルを一覧にして読むPOSのCSV
蓄積・予算・販促・店舗メモのシート読み書き(蓄積のシートだけ書く)実績の蓄積と、計算の材料
Gemini APIUrlFetchApp.fetch() で POST理由の候補と確かめる点
見込みの一覧のシート書き込み見込み・幅・区分・理由の候補・確かめる点
Google Chat受信 Webhook に POST「一覧ができた」と件数の知らせ

UrlFetchApp.fetch() は、method に post、contentType に JSON、headers に API キー、payload に要求の本文を入れて呼びます。muteHttpExceptions を true にすると、失敗の応答でも例外を投げずに応答を返します。 状態コードを見て、その店舗を次の実行で再試行するかを決めます。

API キーと Webhook の URL は、コードに書かずスクリプト プロパティに置きます。 スクリプト プロパティはスクリプトのすべての利用者で共有されます。スクリプトの編集権限は経営企画の担当者に限ります。 Webhook の URL を知っていれば誰でもスペースに投稿できるため、外へ出さないようにします。

Chat に送るのは、件数と一覧へのリンクだけです。 「幅の外で下 9店舗、幅の外で上 4店舗、CSV未着 0店舗」のように書き、店舗ごとの金額は載せません。 スペースの参加者が増えても、数字が広がらないようにします。

Step9

人が確認する

経営企画の担当者が見るのは、見込みの一覧の「幅の外」の行です。 幅の中の店舗は、件数と見込みの合計を確かめるだけにします。

  1. 取り込みの状態を見る … 未着の店舗、異常値の印が付いた店舗がないか。ここがおかしければ、見込みを送りません
  2. 幅の外の店舗の理由の候補を読む … 根拠の数字が一覧の数字と合っているか、候補が店舗メモと矛盾していないかを見ます
  3. 候補を直す・消す … 担当者が知っている事情(本部の販促の変更など)があれば足し、当たっていない候補は消します
  4. 確かめる点を地区の責任者向けに整える … 店長に聞く質問を、地区の言葉に直します
  5. 送る … 地区の責任者と営業部長に一覧を送ります

理由の候補は「候補」の見出しのまま送ります。 地区の責任者が店長に確かめて、初めて理由になります。確かめた結果は、店舗メモのシートに地区の責任者が書き足します。 次の時点の見込みでは、その事情がAIの入力に入ります。

目標は、75店舗をならして1店舗2分です。 幅の外の店舗は1回に10〜15店舗という想定で、それより多い回は、式の補正率が外れているか、全社的な販促の変更が反映されていないかを先に疑います。

Step10

例外に対処する

起きること対応
CSVが届いていない見込みを出さず、Chat に「CSV未着」と知らせる
一部の店舗の行が欠けているその店舗は「未着」とし、見込みを出さない
売上が0の日がある店舗メモで休業を確かめる。メモが無ければ異常値として人へ
前年の実績が無い(新店)直近4週の同じ曜日の平均で見込み、「前年なし」の印
前年の同じ時期に改装休業があった店舗メモの休業期間を前年の通常の同じ曜日の平均で置き換える
処理が6分で終わらないどこまで終わったかをプロパティに残し、次の実行で続きから
Gemini API がエラーを返す見込みと区分は先に一覧へ出し、理由の候補は「未取得」とする
evidence が入力と一致しない候補を一覧から外し、「根拠不一致」として記録
Chat への投稿が失敗する経営企画の担当者へメールで知らせる

7行目の扱いが大事です。 Gemini API が止まった朝でも、見込みの数字と幅は式で出ているので、一覧は予定どおり出せます。 理由の候補が無い一覧でも、地区の責任者は幅の外の店舗を知ることができます。

Step11

記録を残す

  • 取り込んだCSVのファイル名と取り込んだ日時、店舗ごとの行数
  • 各時点(10日・15日・20日・25日)の店舗ごとの見込み・幅・区分と、そのとき使った式の版
  • 月末の実際の着地と、各時点の見込みとのずれ
  • AIに渡した入力と、返ってきたJSONの全文
  • 根拠不一致で外した候補
  • 経営企画が直した・消した候補と、地区の責任者が店舗メモに書き足した確かめた結果

3つ目が、次の月の幅になります。 各時点の見込みと実際のずれを店舗ごとに積み上げ、過去12か月分を使って幅を計算します。 ずれが毎月同じ向きに出る店舗があれば、式の補正率の取り方を見直す材料にもなります。

最後の行は、理由の候補の当たり外れを振り返る材料です。 経営企画が消した候補が多い型(たとえば「客単価の下落」ばかりが外れる)があれば、指示か入力の数字の作り方を直します。

04実装レベルの3段階

最小構成:数店舗の見込みを手で式どおりに計算し、理由の候補をAIの画面で出させる / 式と理由の候補の確かめ
半自動化:上記+スクリプトでCSVの取り込み・見込み・幅・区分を毎回計算し、幅の外の店舗について理由の候補を一覧に出す / 見込みの一覧の作成
本格構成:上記+地区の責任者が確かめた理由を店舗メモに戻す流れ、店長への質問の配信、見込みの式の月次の見直し / 見込みから打ち手の相談までの全体

本記事の想定は半自動化です。 1店舗6分が2分になる計算は、この段階で置いています。経営企画が一覧を確かめて送る作業は残します。 本格構成で足すのは、確かめた理由を次の見込みに戻す流れです。 地区の責任者が店長から聞いた事情を店舗メモに書けば、次の時点で AI の入力に入り、同じ質問が繰り返されなくなります。 ここは地区の運用が絡むので、半自動化で数か月回してから作ります。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
2 名
月間件数
300 件
1件あたり現在時間
6 分
1件あたり導入後時間
2 分
現在  300件 × 6分 ÷ 60 = 30 時間/月
導入後 300件 × 2分 ÷ 60 = 10 時間/月
月間削減時間
20h
削減率
67%
年間削減時間
240h
年間金額換算(時間単価4,000円)
96万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 数十〜百店舗ほどを持つスーパー・ドラッグストア・専門店・飲食のチェーンで、経営企画が月の途中に店舗ごとの売上の着地を見込み、予算に届かない店舗を営業部門と話し合っている場合。POSから店舗別・日別の売上・客数・部門別売上をCSVで出せる場合。着地の見込みの計算が担当者の手元のスプレッドシートにあり、担当者によって計算の仕方が違う場合。
向いていない
  1. 店舗が数店で、店長と本部が毎日直接話して着地を把握できている場合。POSから日別の数字を出せず、月末にならないと売上が分からない場合。来店客数が天候や大型の催事で大きく振れ、前年の並びがほとんど参考にならない業態の場合。AIに予算の修正や店舗の評価を決めさせたい場合(この構成が出すのは見込みの数字と理由の候補までです)。

07最小構成で試す方法

  1. 先月の5店舗を選ぶ(予算に大きく届かなかった店舗と、ほぼ予算どおりの店舗を混ぜる)
  2. 先月15日時点の実績の累計と、前年の同じ月の日別の実績をスプレッドシートに並べる
  3. 残りの日を「364日前の売上 × 直近14日の前年比」で手で見込み、実際の着地と比べる
  4. 予算に届かなかった店舗の客数・客単価・部門別の前年比を、会社が契約しているAIサービスに貼る
  5. 「予算との差の理由の候補を、根拠にした数字の項目名付きで最大3つ出してください。入力に無い事情は書かず、店長に確かめる点として質問にしてください」と指示する

3番目は、AIを使わずにまず式だけを確かめる手順です。 式で出した見込みが、担当者の手計算より実際の着地に近いかを先に見ます。

出てきた内容判断
式の見込みが手計算より実際に近く、理由の候補が当時の店長の説明と重なったスクリプトとの連携に進む
式の見込みは良いが、理由の候補に天候などの推測が混ざった指示の書き方で直る。構成は有効
式の見込みが手計算より実際から遠い販促のずれと休業の調整が先。 AIの前に式を直す

3行目が出ても、構成をやめる理由にはなりません。 多くは、前年の大型の販促や改装休業が364日前の日に入っていたためです。店舗メモと販促の予定を整えると、式のずれは小さくなります。

08実装時につまずきやすいポイント

問題対策
前年の同じ日付で取って曜日がずれる364日前(52週前)で取る
CSVが1日欠けて全店舗が下振れする取り込みの件数を数え、欠けていれば見込みを出さない
前年のチラシの日が見込みを押し上げる販促の予定で今年と前年を照らし、ずれた日を置き換える
新店に前年の実績が無い直近4週の同じ曜日の平均で見込み、印を付ける
AIが天候や景気を理由に挙げる入力に無い事情は質問の形にさせる
AIが着地の金額を計算し直してくる指示で禁じ、スキーマに金額の欄を作らない
理由の候補の根拠の数字が入力と違うevidence をスクリプトで照合し、一致しない候補を外す
処理が6分で終わらない取り込み・計算・AIの呼び出しを別の実行に分ける
POSのCSVの文字が化ける文字コードを指定して取り出す
Webhook の URL が外に出るスクリプト プロパティに置き、編集権限を限る
理由の候補が確定した理由として広まる「候補」の見出しのまま送り、確かめた結果は店舗メモへ

上の3行が、見込みの数字の失敗のほとんどです。 どれもAIとは関係がなく、前年の並びをどう今年に当てはめるかの問題です。ここを直すほうが、理由の候補の精度を上げるより効きます。

下の2行は、運用の約束で防ぎます。 一覧が便利になるほど、理由の候補がそのまま会議で使われがちです。地区の責任者が店長に確かめるまでは、候補のままです。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 店舗ごとの売上・客数・部門別売上・予算と、地区の責任者が書いた店舗の事情のメモです。個人の情報は含みませんが、店舗別の予算と実績は社外に出せない経営の情報です。

  1. 有料の枠で使う … Gemini API の追加の利用規約では、無料の枠に送った内容は製品の改善に使われ、人が読むことがあるとされ、機密の情報を送らないよう求められています。 有料の枠では、プロンプトと応答を製品の改善に使わないとされています。店舗の数字を扱う以上、有料の枠で使います
  2. 渡す範囲を絞る … AIに渡すのは、幅の外の店舗の前年比と構成比、販促の予定、店舗メモです。売上の金額そのものより、比率を中心に渡します
  3. 店舗メモに個人のことを書かない … 店長や従業員の個人的な事情は、メモに書かないルールにします。AIの入力に入るためです
  4. 知らせに数字を載せない … Chat には件数とリンクだけを送ります
  5. AIに判断させない … 予算の修正、店舗の評価、打ち手の決定は、経営企画・地区の責任者・営業部長が行います。 この構成が出すのは、見込みの数字と理由の候補までです
  6. 式を変えたら記録する … 見込みの式は経営の数字に関わります。誰がいつ何を変えたかを残し、変える前と後の見込みを並べて確かめます

誤りが起きた場合のリスクは、見込みが外れて手を打つのが遅れることと、根拠の無い理由の候補で店長に的外れな指示が出ることの2つです。 前者は幅を示すことで、後者は evidence の照合と「候補」の扱いで防ぎます。

10まず何から始めるか

1週目:式を決めて5店舗で確かめる

364日前の売上と直近14日の前年比で見込む式を、先月の5店舗で手で計算し、実際の着地と比べます。担当者の今の計算の仕方と、どちらが実際に近いかを見ます。

2週目:販促の予定と店舗メモを整える

前年と今年の販促の予定を1つのシートに並べ、改装休業や新店の情報を店舗メモに書きます。ここが整わないと、式の見込みが前年の特殊な日に引っ張られます。

3週目:取り込みと見込みの計算を作る

POSのCSVを共有ドライブから取り込み、全店舗の見込みと幅、区分を一覧に出すところまで作ります。この時点ではAIを呼びません。 幅の外の店舗が毎回何店舗になるかを数えます。

4週目:理由の候補を足す

幅の外の店舗について Gemini API を呼び、理由の候補と確かめる点を一覧に出します。最初の1か月は、経営企画が自分で探した理由と並べて比べます。

2か月目: 一覧を地区の責任者に送る運用に切り替え、確かめた結果を店舗メモに書いてもらいます。3か月目以降: 各時点の見込みと実際の着地のずれを月ごとに見て、式の調整を続けます。1店舗6分が何分になったかと、幅の外の店舗に月の前半で理由が付いた割合を実測した時点で、この構成は完成です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-10-07/最終更新:2026-10-07
確認した内容情報源確認日
時間主導型のトリガーが毎分から毎月までの間隔で動き、動く時刻が少しずれること。インストール型トリガーは作成した人のアカウントで実行されることGoogle for Developers: Installable triggers2026-10-07
1回の実行が6分まで。トリガーの合計実行時間が Google Workspace で1日6時間。URL の取得が Google Workspace で1日100,000回Google for Developers: Quotas for Google Services2026-10-07
Blob の getDataAsString(charset) で文字コードを指定して文字列を取り出せることGoogle for Developers: Blob2026-10-07
Utilities.parseCsv() が CSV の文字列を2次元の配列にすることGoogle for Developers: Utilities2026-10-07
UrlFetchApp.fetch() の method・contentType・payload・headers・muteHttpExceptionsGoogle for Developers: UrlFetchApp2026-10-07
スクリプト プロパティがスクリプトのすべての利用者で共有されることGoogle for Developers: Properties Service2026-10-07
Google Chat の受信 Webhook が外部からスペースへの一方向の知らせであること。スペースあたり毎秒1回の上限を Webhook で共有すること。組織が Webhook の利用を許可している必要があることGoogle for Developers: Send Google Chat messages with incoming webhooks2026-10-07
Gemini API の構造化出力が /v1beta/interactions の response_format(mime_type と schema)で指定でき、値の正しさはアプリケーションで確かめるべきことGoogle AI for Developers: Structured output2026-10-07
無料の枠に送った内容が製品の改善に使われ人が読むことがあり、機密・個人の情報を送らないよう求められていること。有料の枠ではプロンプトと応答を製品の改善に使わないことGoogle AI for Developers: Gemini API Additional Terms of Service2026-10-07

見込みの式の調整(販促のずれ、休業、新店の扱い)と、どの幅を「外」とするかは、自社の店舗の実情に合わせて決めてください。 本記事は Google for Developers と Google AI for Developers で確認できた範囲だけを扱っています。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-0636)についてのご相談はこちらから。

AI活用について相談する
目次