店舗ごとの月次の予算と実績の差を客数・客単価・品目の構成に分けて要因を出し、店長会議の説明文の下書きを作る
月次の締めの後に、店舗ごとの売上と粗利の予算との差を、客数・客単価・品目の構成・部門の粗利率に分けて計算します。その数字と販促・店舗の出来事の記録から、店長会議に載せる店舗ごとの説明文の下書きを作ります。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Python
- 対象業界
- 小売/飲食
- 対象部門
- 経営企画
- 対象業務
- 書類作成/集計・分析
- 主な課題
- データ分析に時間がかかる/属人化している/書類作成に時間がかかる
- AIで行う処理
- 生成
- 主な効果
- 判断支援/品質標準化/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 締めの翌日に、POSの集計と予算の表を店舗ごとに並べる
- 店舗ごとに、売上の差を客数の差と客単価の差に分ける計算を表計算で行う
- 部門ごとの売上の構成比と粗利率を予算と比べ、粗利の差がどこから来たかを見る
- 販促の実施の表と店舗運営部のメモを開き、その店で何があったかを探す
- 説明文を3〜5行で書く
- 地区の担当の課長が説明文を読み、直して資料に載せる
- 自動締めの確定を経営企画が印にしたことをきっかけに、POSの集計と予算の表を読み込む
- 自動店舗ごとに、売上の差を客数の要因と客単価の要因に分ける
- 自動粗利の差を、売上の量の要因・品目の構成の要因・部門の粗利率の要因に分ける
- 自動要因の合計が予算との差に一致することを確かめる(一致しなければ止める)
- 自動その店の販促の実施と出来事のメモを、店舗と月で引く
- 自動要因の数字と記録を生成AIに渡し、差し込みの印を使った説明文の下書きを作らせる
- 自動差し込みの印に計算の結果を入れ、記録に無い事柄が書かれていないかを確かめる
- 人地区の担当が説明文を読み、直して資料に載せる
各工程の詳しい説明を読む
- 締めの翌日に、POSの集計と予算の表を店舗ごとに並べる
- 店舗ごとに、売上の差を客数の差と客単価の差に分ける計算を表計算で行う
- 部門ごとの売上の構成比と粗利率を予算と比べ、粗利の差がどこから来たかを見る
- 販促の実施の表と店舗運営部のメモを開き、その店で何があったかを探す
- 説明文を3〜5行で書く
- 地区の担当の課長が説明文を読み、直して資料に載せる
(a)計算の仕方が担当で違う。 売上の差を客数と客単価に分けるとき、どちらの数字を予算に置き、どちらを実績に置くかで、要因の金額が変わります。 担当ごとに式が違い、合計が差と合わない表もあります。
(b)粗利の差を分けきれない。 売上が予算どおりでも、惣菜の構成比が下がって日用品が増えれば、粗利は予算に届きません。品目の構成と、部門の粗利率の変化を分けて見ないと、値下げのせいなのか、売れる物が変わったせいなのかが分かりません。
(c)理由を探す時間が長い。 販促の実施の表と出来事のメモは別々の場所にあり、120店分を開いて、その月その店で何があったかを拾う作業が、1店ごとに繰り返されます。 見つからなければ店長に電話をかけ、その返事を待つあいだ、説明文が書けない店が残ります。
(d)説明文の書き方がそろわない。 ある担当は客数から書き、別の担当は部門から書きます。店長は毎月違う形の説明文を読むことになり、前の月と比べにくくなります。
- 【自動】 締めの確定を経営企画が印にしたことをきっかけに、POSの集計と予算の表を読み込む
- 【自動】 店舗ごとに、売上の差を客数の要因と客単価の要因に分ける
- 【自動】 粗利の差を、売上の量の要因・品目の構成の要因・部門の粗利率の要因に分ける
- 【自動】 要因の合計が予算との差に一致することを確かめる(一致しなければ止める)
- 【自動】 その店の販促の実施と出来事のメモを、店舗と月で引く
- 【自動】 要因の数字と記録を生成AIに渡し、差し込みの印を使った説明文の下書きを作らせる
- 【自動】 差し込みの印に計算の結果を入れ、記録に無い事柄が書かれていないかを確かめる
- 【人】 地区の担当が説明文を読み、直して資料に載せる
4番目を止める仕組みにしているのは、意図してのことです。 要因の合計が差に合わない店は、予算か実績のどこかの数字が欠けています。合わないまま文章を作ると、正しく見える説明文が間違った数字の上に乗ります。
8番目が、この設計の分かれ目です。 人は説明文を1から書きません。下書きの理由が記録に照らして正しいかと、店長に伝えたいことが入っているかを見て直します。 1店40分の作業が、1店10分の確認と直しに変わります。
02今回想定するシステム構成
POS の集計(店舗・日・部門の売上・粗利・客数) 予算の表(店舗・月・部門の売上・粗利、店舗の客数) ▼【トリガー】締めの確定の印(経営企画が付ける) Python ├──▶ 店舗・月・部門にそろえる ├──▶ 売上の差 = 客数の要因 + 客単価の要因 ├──▶ 粗利の差 = 売上の量 + 品目の構成 + 部門の粗利率 ├──▶ 検算(要因の合計 = 差)。合わなければ止める ├──▶ 販促の実施の表と出来事のメモを店舗と月で引く ▼ Claude API(構造化出力) │ 差し込みの印を使った説明文と、根拠にした記録の番号 ▼ Python ── 数字の差し込み、記録に無い事柄の検出 ▼ 店舗ごとの資料の下書き ▼ 【地区の担当が確認して直す】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Python(pandas) | R |
| 生成AI | Claude API(構造化出力。説明文の下書き) | OpenAI API、Gemini API |
| 集計 | Python(要因の計算と検算) | スプレッドシートの式 |
| データの取得元 | POSの集計の書き出しと予算の表 | 基幹の仕組みのデータベース |
| 記録 | 販促の実施の表、店舗運営部の出来事のメモ | 社内の掲示板の書き出し |
| 結果の出力先 | 店舗ごとの資料の下書き(表と説明文) | 店長会議の資料のひな形 |
要因の計算は、生成AIに一切させません。 4つの要因は決まった式で Python が出し、合計が差に一致することを毎回確かめます。 計算を文章の中で行わせると、桁や符号の誤りが説明文に紛れ込みます。
説明文の下書きは、Claude API の構造化出力で受け取ります。 リクエストの output_config.format に type: "json_schema" と JSON Schema を渡すと、決めた形の JSON が応答の本文に返ります。 ベータの指定は要りません。決めた形で返るので、差し込みの印と根拠の番号を Python が機械的に読めます。
JSON Schema には書けない制約があります。 minimum・maximum などの数の制約や、minLength・maxLength の文字数の制約は使えず、オブジェクトには additionalProperties: false が必要です。 説明文の長さは、受け取った後に Python で数えて確かめます。
記録に無い理由を書かせないために、Anthropic の手引きの考え方に沿います。 手引きでは、分からないときに分からないと答えてよいと明示すること、渡した資料の情報だけを使い一般的な知識を使わないよう指示すること、主張ごとに根拠を示させることが挙げられています。この構成では、理由ごとに根拠にした記録の番号を返させ、番号の無い理由を後段で外します。
03どうやって実装するのか
処理の起点を決める
締めの確定を、経営企画が予算と実績の表に付ける印で知らせます。 共有フォルダに「確定」のファイルを置くか、表の確定の列に印を付けると、Python のスクリプトが動きます。POSの集計は締めの後にも返品や訂正で数字が動くため、日付で自動に動かしません。
1回の実行で120店をすべて処理します。 1店ごとに、要因の計算、記録の引き当て、説明文の下書き、差し込みと確認を順に行い、検算が合わない店と確認で外れた店は、印を付けて一覧の先頭に並べます。
同じ月をもう一度動かしたときは、前回の結果を残したまま新しい版を作ります。 締めの後に数字の訂正が入ったとき、どの数字で説明文を書いたかを後から追えるようにするためです。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 実績 | 店舗・日・部門ごとの売上、粗利、店舗の客数 | POSの集計の書き出し |
| 予算 | 店舗・月・部門ごとの売上と粗利、店舗の月の客数 | 予算の表 |
| 前年の実績 | 同じ店舗・月の部門ごとの売上・粗利・客数 | POSの集計の書き出し |
| 販促の記録 | 店舗、期間、販促の種類(チラシ・ポイント・催事)、対象の部門 | 販促の実施の表 |
| 出来事のメモ | 店舗、日付、内容(改装、近隣の競合の開店、設備の故障、休業) | 店舗運営部のメモ |
| 店舗の属性 | 地区、売場の面積、開店の年、改装の予定 | 店舗の台帳 |
質を決めるのは、出来事のメモです。 数字の要因は式で必ず出ますが、「なぜ客数が減ったか」は、メモに書かれていなければ説明文に書けません。 店舗運営部に、競合の開店・改装・休業・設備の故障を、日付と店舗の付いた形で残してもらいます。
前年の実績は、説明文で「前年と比べてどうか」を添えるために使います。 予算との差だけでは、予算の立て方が厳しかったのか、売れ方が変わったのかが分かりません。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 実績・前年の実績 | POSの集計の書き出し(CSV) | 要因の計算 |
| 予算 | 予算の表 | 要因の計算 |
| 販促の記録 | 販促の実施の表 | 説明文の根拠 |
| 出来事のメモ | 店舗運営部のメモの書き出し | 説明文の根拠 |
| 店舗の属性 | 店舗の台帳 | 説明文の前提、地区ごとの並べ替え |
実績と予算は、店舗・月・部門の3つで結びます。 結ぶときに、予算にあって実績に無い組み合わせ、実績にあって予算に無い組み合わせを数えます。部門の新設や廃止、店舗の開店の月にこれが起き、黙って結ぶと、その部門の数字が0として計算されます。
売上と粗利の定義を、予算と実績でそろえます。 実績の売上が値引き後か値引き前か、税込か税抜か、粗利に廃棄と値下げの損を含めるかが予算の立て方と違うと、定義の違いがそのまま「部門の粗利率の要因」として出てきます。 取り込むときに、予算の表の定義に合わせて実績の列を選び、どの列を使ったかを設定の表に書いておきます。
販促の記録と出来事のメモは、店舗と期間で引きます。 月をまたぐ販促は、その月に入る日数がある分だけ引き、メモは記録ごとに番号を振ってから生成AIに渡します。 この番号が、説明文の根拠の番号になります。
AIへ渡す前に整形する
- 日次を月にまとめる … 実績を店舗・月・部門ごとに足し上げます。客数は店舗の合計だけを使います
- 結びつきの欠けを数える … 予算と実績の組み合わせの片方が無いものを数え、欠けのある店は要因の計算に進めずに印を付けます
- 1人あたりの購入額を出す … 部門ごとに「部門の売上 ÷ 店舗の客数」を、予算と実績のそれぞれで出します
- 構成比と粗利率を出す … 部門ごとの売上の構成比と、部門の粗利率を、予算と実績のそれぞれで出します
- 要因を計算する … 次の式で4つの要因を出します(式は第7章のプロンプトまたは指示内容の例に記載)
- 検算する … 売上の要因の和と売上の差、粗利の要因の和と粗利の差が、1円の単位で一致するかを確かめます
- 大きい順に並べる … 部門ごとの要因を金額の大きさの順に並べ、上位3つを説明文の材料にします
- 記録に番号を振る … 販促の記録と出来事のメモを1件ずつ
P1、E1のような番号にします
5番目の式を、全店で1つに決めます。 第3章の(a)のとおり、要因の分け方は置き方で金額が変わります。どの置き方が正しいということではなく、全店・毎月で同じ置き方を使うことが大事です。 本記事では、客数の要因を予算の客単価で、客単価の要因を実績の客数で評価する置き方にしています。
6番目が合わない店は、説明文を作りません。 合わないのは、予算か実績の部門の数字が欠けているか、客数が0の日を含むかのどちらかがほとんどです。数字を直してから、その店だけ動かし直します。
AIに処理させる
させるのは、計算済みの要因と番号付きの記録から、差し込みの印を使った説明文と、理由ごとの根拠の番号を返すことだけです。
| 書くもの | 材料 | 判断できないときの扱い |
|---|---|---|
| 売上の差の説明 | 客数の要因、客単価の要因、部門ごとの1人あたりの購入額の要因 | 要因を述べるだけにし、理由を書かない |
| 粗利の差の説明 | 売上の量・品目の構成・部門の粗利率の要因の上位 | 同上 |
| 理由の候補 | 販促の記録、出来事のメモ(番号付き) | 記録が無ければ「記録からは理由を特定できない」と書く |
| 前年との比較 | 前年の実績との差 | 前年の実績が無い店(開店1年以内)は書かない |
| 店長に確かめたい点 | 理由の分からない大きい要因 | 1〜2点に絞る |
「記録が無ければ理由を特定できないと書く」が、この構成でいちばん大事な指示です。 客数が減った店について記録が無いと、生成AIは「天候の影響」「近隣の競合」のような、どの店にも当てはまる理由を書きがちです。記録に無い理由は、店長会議で事実として読まれてしまいます。 分からないと書かせ、店長に確かめる点に回します。
説明文の並びは、全店で同じにします。 売上の差、粗利の差、理由の候補、店長に確かめたい点の順で、この順を崩さないよう指示と出力の形の両方で決めます。 店長は毎月同じ場所に同じ種類の情報があることで、前の月の資料と並べて読めます。第3章の(d)の書き方のばらつきは、この並びで解消します。
部門の要因は、金額の大きい順の上位3つだけを渡します。 7部門すべてを渡すと、小さな要因まで文章に入り、3〜5行に収まりません。上位3つに入らなかった部門は、資料の要因の表で読めるので、説明文から外しても失われません。
| させないこと | 理由 |
|---|---|
| 数字の計算・言い換え | 計算は Python。数字は差し込みの印で書かせる |
| 記録に無い理由 | 店長会議で事実として読まれる |
| 店舗や店長の評価 | 評価は上長が行う。説明文は差の説明に限る |
| 対策の指示 | 何をするかは店長と地区の責任者が決める |
| 予算の妥当性の判断 | 予算の見直しは経営企画の会議で決める |
指示内容を固定する
あなたはスーパーの経営企画部で、店長会議の資料に載せる説明文を下書きする立場です。
渡した数字と記録だけを使ってください。一般的な知識や推測で理由を補わないでください。
【書くこと】
1. 売上の予算との差を、客数の要因と客単価の要因で説明する(1〜2文)
2. 粗利の予算との差を、要因の上位から説明する(1〜2文)
3. 理由の候補を、記録の番号を付けて書く(0〜3件)
4. 店長に確かめたい点を書く(1〜2点)
【数字の書き方】
- 金額・比率・人数を数字で書かないでください。必ず次の印で書いてください。
{sales_diff} {visitors_effect} {ticket_effect} {gp_diff}
{volume_effect} {mix_effect} {margin_effect}
{dept_top1_name} {dept_top1_effect} {dept_top2_name} {dept_top2_effect}
{visitors_yoy} {ticket_yoy}
- 印に無い数字を書かないでください。
- 「増えた」「減った」の向きは、渡した符号のとおりに書いてください。
【理由の書き方】
- 理由には、根拠にした記録の番号(P1、E2 など)を必ず付けてください。
- 理由の文で日付や日数を書くときは、記録に書かれている数字をそのまま使ってください。
- 記録が無い、または記録から理由が読み取れない場合は、
「記録からは理由を特定できない」と書き、店長に確かめたい点に回してください。
- 天候・景気・競合など、記録に書かれていない一般的な理由を書かないでください。
- 店舗や店長の良し悪しを評価する言葉を使わないでください。
- 対策の指示を書かないでください。
【要因の値(符号付き。単位は円)】{effects}
【部門ごとの要因の上位3つ】{dept_effects}
【前年との比較】{yoy}
【記録(番号付き)】{records}
【店舗の属性】{store_profile}
「数字を書かずに印で書く」を明記しないと、文章の中で数字を作ります。 要因の値を渡していても、「約120万円」のように丸めたり、2つの要因を足した数字を書いたりします。差し込みにすれば、説明文の数字は必ず計算の結果と一致します。
「向きは符号のとおりに」も明記します。 マイナスの要因を「減少要因」と書くべきところで、「減少した」の主語を取り違える誤りが出ます。差し込んだ後に、印の前後の「増」「減」と符号が合っているかを Python で確かめます。
要因の計算の式は、次のとおりです(S=売上、C=客数、T=客単価=S÷C、s_d=部門の構成比、g_d=部門の粗利率、添え字 a=実績、b=予算)。
客数の要因 =(C_a − C_b)× T_b
客単価の要因 =(T_a − T_b)× C_a
└ 部門ごと =(S_a,d ÷ C_a − S_b,d ÷ C_b)× C_a
売上の量の要因 =(S_a − S_b)× Σ s_b,d × g_b,d
品目の構成の要因 = S_a × Σ(s_a,d − s_b,d)× g_b,d
部門の粗利率の要因 = S_a × Σ s_a,d ×(g_a,d − g_b,d)
検算:客数 + 客単価 = S_a − S_b
売上の量 + 品目の構成 + 部門の粗利率 = 粗利_a − 粗利_b 出力形式を固定する
次の形のJSONを、構造化出力で受け取ります。
{
"store_id": "",
"month": "",
"sales_text": "",
"gp_text": "",
"reasons": [
{ "text": "", "record_ids": ["P1"] }
],
"no_reason_found": false,
"questions_for_manager": [""]
}
1つ目の理由は、reasons ごとに record_ids を持てることです。 Python は、record_ids が空の理由と、渡していない番号を指す理由を外します。記録に無い理由が資料に載る経路を、形の上で塞ぎます。
2つ目は、no_reason_found で「分からない」を明示できることです。 理由が見つからなかった店は、地区の担当が店長に聞く店として一覧で先に並べます。分からない店を分からないまま会議に出すほうが、もっともらしい理由で埋めるより会議の役に立ちます。
3つ目は、sales_text と gp_text を分けて持てることです。 差し込みの印の入った文を受け取り、Python が計算の結果を差し込んでから資料のひな形に入れます。差し込んだ後の文の長さを数え、120字を超えたものには印を付けます。
差し込んだ後の資料の説明文は、たとえば次の形になります(数字は形を示すための例です)。
【売上】予算に対して −1,840千円。客数の要因が −2,310千円、客単価の要因が +470千円で、
客数の不足が差のほとんどを占める。
【粗利】予算に対して −910千円。品目の構成の要因が −520千円で最も大きく、
惣菜の構成比が予算を下回った影響が大きい。
【理由の候補】第2週に近隣で競合店が開店した(E1)。惣菜の売場改装で4日間縮小した(E2)。
【店長に確かめたい点】第4週も客数が戻っていない理由。
金額の単位と丸め方も Python の側で決めます。 千円単位に丸め、符号を必ず付けて差し込みます。丸めた後の要因の和が、丸めた差と1千円ずれることがありますが、検算は丸める前の値で済ませているので、資料の表に「千円未満を四捨五入」と注記します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| POSの集計 | CSV の書き出しの読み取り | 実績と前年の実績 |
| 予算の表 | 表の読み取り | 店舗・月・部門の予算 |
| 販促の実施の表・出来事のメモ | 表の読み取り | 番号付きの記録 |
| Claude API | API呼び出し(構造化出力) | 説明文の下書きと根拠の番号 |
| 店舗ごとの資料の下書き | ひな形への書き出し | 要因の表と説明文 |
POSの集計と予算の表には書き込みません。 この構成が作るのは資料の下書きだけで、予算の見直しや実績の訂正は、それぞれの持ち主が行います。
Claude API に渡すのは、1店分の要因の数字と記録だけです。 120店の一覧や、他の店の数字は渡しません。店舗どうしの比べ方は人が決めることで、生成AIに並べさせません。
人が確認する
地区の担当が、全店の説明文を読みます。 説明文は店長会議でそのまま読まれるので、確認を省く店は作りません。 そのかわり、1店40分の作業が、下書きを読んで直す10分に変わります。
- 検算が合わなかった店を先に見る … 説明文は作られていません。数字の欠けを直して動かし直します
no_reason_foundの店を見る … 店舗運営部か店長に、記録に無い事情を聞きます。分かったことはメモに足してから、説明文を直します- 理由と記録を照らす …
record_idsの記録を開き、理由が記録の内容と合っているかを見ます - 店長に確かめたい点を絞る … 会議で聞く点が1〜2点に絞れているかを見ます
- 直したら記録する … どの文を、どう直したかを残します
3番目を省かないでください。 記録の番号が付いていても、記録の中身と違う読み方をしていることがあります。 「改装のため3日休業」のメモから「改装で客数が増えた」と書く、といった誤りです。
確認の順番は、店長会議の日程に合わせます。 地区ごとに会議の日が違うので、会議の早い地区の店から一覧に並べ、no_reason_found の店には会議の3日前までに店長へ問い合わせます。 問い合わせて分かったことは、出来事のメモに足してから、その店だけ説明文を作り直します。
5番目の記録は、プロンプトを直す材料になります。 同じ種類の直しが続くなら、指示の書き方で直せることが多いからです。
例外に対処する
| 起きること | 対応 |
|---|---|
| 予算と実績の組み合わせが欠けている | 要因を計算せず印を付ける。部門の新設・廃止を確かめる |
| 検算が合わない | 説明文を作らずに止め、一覧の先頭へ |
| 客数が0の日がある(休業) | 月の客数から外さず、出来事のメモに休業の記録があるかを確かめる |
| 開店1年以内の店 | 前年との比較を渡さない |
| 記録が1件も無い | 説明文は要因だけにし、no_reason_found |
| 応答が決めた形にならない、API が応答しない | その店を印付きで残し、後で動かし直す |
| 渡していない番号を指す理由がある | その理由を外し、外したことを記録する |
| 差し込みの印に無い数字が文中にある | その文を外して印を付ける |
| 差し込んだ後の文が長すぎる | 印を付け、人が縮める |
上から3行目までが大半を占めます。 どれも生成AIの問題ではなく、予算と実績の持ち方と、出来事の記録の問題です。 直すほうが、指示を工夫するより効きます。
下の2行は、生成AIの出力を Python で確かめる仕組みです。 sales_text と gp_text の数字は、全角・半角の数字の並びを探して見つけ、差し込みの印から入った数字以外があれば外します。 reasons の文に出てくる日数や週は、指している記録の本文に同じ数字があるときだけ残します。
記録を残す
- 要因の計算の結果(店舗・部門ごと)と、検算の結果
- 生成AIに渡した数字と記録、返ってきた JSON の全文
- 差し込み後の説明文と、確認で外した理由の一覧
- 人が直した後の説明文と、直した箇所
- 使ったプロンプトの版
- 計算に使った POS の集計と予算の表の版(取り込んだ日時)
最後の行は、締めの後の訂正に備えるものです。 数字の訂正が入ったとき、どの版の数字で説明文を書いたかが分からないと、資料のどこを直すかが決まりません。
4つ目は、店長会議で使われた説明文そのものです。 翌月の説明文を書くときに、前の月に何と説明したかを並べて読めるよう、店舗と月で引ける形で残します。
04実装レベルの3段階
最小構成では、120店はさばけません。 1店ずつ貼り付けるので、確かめるための段階です。 ただし、ここで決めた要因の式と指示の書き方は、そのまま本格構成に持ち込めます。 半自動化で、1店40分が20分程度になります。 要因の計算と記録を探す作業が無くなり、担当は並んだ数字と記録を見て説明文を書きます。本格構成で10分になり、この段階が本記事の想定です。 差が大きいのは、説明文を1から書く作業が、下書きを読んで直す作業に置き換わるからです。 段階を飛ばさないでください。 半自動化を1か月使うと、検算の合わない店と、記録がほとんど無い店が先に分かります。そこを直してから説明文の下書きを足すほうが、「分からない」ばかりの下書きになりません。
05工数削減シミュレーション
導入後 120件 × 10分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 数十から数百の店舗を持つスーパー・ドラッグストア・専門店・飲食のチェーンで、店舗・月・部門ごとの売上と粗利と客数の予算を持ち、POSの実績と比べる資料を経営企画が毎月作っている場合。店長会議の資料の店舗ごとの説明文を担当者が1店ずつ書いており、書き手によって見る数字と書き方が違う場合。販促の実施や店舗の出来事が、表やメモとして残っている場合。
- 店舗が数店で、予算と実績の差を店長が自分で説明できる場合。予算を店舗の合計の売上でしか持っておらず、客数や部門の予算が無い場合(まず予算の粒度をそろえる段階です)。差の理由を数字の外の事情(人の配置、近隣の工事)でしか説明できない店舗が大半の場合。なお、店舗の評価、予算の見直し、店長への指示の判断は、この構成では代替できません。
07最小構成で試す方法
- 先月の店舗から10店を選ぶ(うち数店は、売上は予算どおりで粗利が届かなかった店を入れる)
- 表計算で、第7章の式で4つの要因を出し、検算が合うことを確かめる
- 10店分の要因の数字と、その店の販促と出来事の記録を、手元の生成AIの画面に貼る
- 「この数字と記録だけを使い、売上と粗利の差の説明を書いてください。数字は印で書いてください。記録に無い理由は書かず、分からなければ分からないと書いてください」と指示する
- 出てきた説明文を、当時担当が書いた説明文と並べる
10店は必ずやってください。 貼り付ける前に、出来事のメモから従業員や客の名前を伏せておきます。組み立てる前に、「決まった式の要因と記録から、使える説明文が書けるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 当時の説明文と同じ理由が、記録の番号付きで出た | API とひな形の連携に進む |
| 記録に無い一般的な理由を書いた | 指示の書き方で直る。構成は有効 |
| ほとんどの店で理由が「分からない」になる | 出来事の記録が足りない。 店舗運営部との取り決めが先 |
3行目が出ることは珍しくありません。 失敗ではなく、理由を担当の記憶と店長への電話で補っていたと分かったということです。 その場合は、店舗運営部に出来事のメモの付け方を1か月だけ変えてもらい、同じ10店でやり直してください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 要因の合計が差と合わない | 置き方を1つに決め、検算を毎回行う。 合わなければ止める |
| 部門の新設・廃止で数字が0になる | 組み合わせの欠けを数え、黙って結ばない |
| 文章の中で数字を作る | 数字は印で書かせ、Python が差し込む |
| 増減の向きを取り違える | 印の前後の言葉と符号を Python で照らす |
| 記録に無い一般的な理由を書く | 根拠の番号を必須にし、番号の無い理由を外す |
| 記録の中身と違う読み方をする | 人が record_ids の記録を開いて照らす |
| JSON Schema で文字数を縛ろうとして 400 になる | 文字数の制約は書けない。受け取った後に数える |
| ほとんどの店で「分からない」になる | 出来事の記録の付け方を店舗運営部と決める |
| 他の店と比べた評価を書く | 渡すのは1店分だけ。評価の言葉を禁じる |
| 締めの後の訂正で数字がずれる | 取り込んだ表の版を残し、版ごとに動かし直す |
上の3行が、この構成の失敗のほとんどです。 どれも、説明文に載る数字が計算と食い違うことから起きます。検算と差し込みで数字の経路を1本にしておけば、残るのは文章の直しだけです。
下の2行も、同じくらい早く効いてきます。 説明文が店舗の評価のように読まれると、店長は会議で数字の話をしなくなります。説明文は差の説明に限ることを、プロンプトと運用の両方に書いておいてください。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 店舗ごとの売上・粗利・客数、予算、販促の計画と実施、店舗の出来事です。個人の情報はほとんど含みませんが、店舗ごとの粗利と予算は、社外に出せない経営の情報です。
- 外部へ渡す範囲を1店分の要因と記録に限る … 生成AIに渡すのは、1店分の要因の数字と番号付きの記録だけです。全店の一覧、予算の表そのもの、仕入れの値は渡しません
- 出来事のメモから個人の情報を外す … メモに従業員や客の名前が書かれていることがあります。番号を振る前に、名前と思われる部分を伏せる処理を入れます
- 店舗や店長の評価に使わない … 説明文は差の説明です。評価は上長が、説明文以外の材料も含めて行います
- 記録に無い理由を事実として扱わない … 根拠の番号の無い理由は外し、分からない店は分からないとして会議に出します
- 販促の計画を先に渡さない … 販促の記録は、その月に実施した分だけを渡します。翌月以降の販促の計画は、取引先との条件を含むことがあり、説明文にも要りません
- API の鍵と出力の置き場を管理する … 鍵は経営企画の実行環境だけに置き、説明文の下書きは店長会議の資料と同じ権限の場所に置きます
- 数字の確定は人が行う … 予算と実績の数字の訂正は、それぞれの持ち主が行い、この構成の中で数字を直しません
誤りが起きた場合のリスクは、間違った数字の上に説明文を作ることと、記録に無い理由を事実として会議に出すことの2つです。 前者は検算で止め、後者は根拠の番号で外します。どちらも最後は地区の担当が読む設計にしています。
10まず何から始めるか
1週目:要因の置き方を決める
客数の要因と客単価の要因をどちらの数字で評価するか、粗利の差をどの3つに分けるかを、経営企画で1つに決めます。 第7章の式を使う場合は、先月の10店で検算が合うことを表計算で確かめます。
2週目:10店で試す
先月の10店について、要因の数字と記録を手元の生成AIの画面に貼り、説明文を書かせます。当時の説明文と並べ、記録に無い理由を書いていないかを最優先で見ます。
3週目:出来事の記録の付け方を決める
店舗運営部と、競合の開店・改装・休業・設備の故障を、店舗・日付・内容の形で残す取り決めを結びます。 販促の実施の表に、対象の部門の列があるかも確かめます。
4週目:要因の計算をつなぐ
Python で POS の集計と予算の表を読み、全店の要因の計算と検算、記録の引き当てまでを作ります。この時点では説明文を作らず、要因と記録の一覧を担当に使ってもらいます。
2か月目: Claude API で説明文の下書きを足し、差し込みと根拠の確認を入れます。no_reason_found の店の数を毎月数えます。3か月目以降: 1店40分が何分になったかを実測し、直しの記録からプロンプトを直します。「分からない」の店が減り、店長会議で同じ形の説明文を毎月比べられるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
構造化出力が GA で、output_config.format に type: "json_schema" と schema を渡すこと。ベータの指定が要らないこと(旧来の output_format は非推奨)。JSON が応答の本文に返ること。minimum・maximum などの数の制約、minLength・maxLength が使えず、オブジェクトには additionalProperties: false が必要で、使えない機能は 400 になること | Claude Docs: Structured outputs | 2026-10-14 |
| 誤りを減らす方法として、分からないと答えてよいと明示すること、主張ごとに根拠を示させ根拠が無ければ取り下げさせること、渡した資料の情報だけを使い一般的な知識を使わないよう指示することが挙げられていること。これらの方法でも誤りを無くせるわけではなく、重要な情報は確かめるべきとされること | Claude Docs: Reduce hallucinations | 2026-10-14 |
店舗の評価、予算の見直し、店長への指示は、経営企画と店舗運営の責任者の判断で決めてください。 本記事は製品の公開ドキュメントで確認できた範囲だけを扱っています。要因の式は一般的な分け方の一例で、自社の取り決めに合わせて決めてください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1452)についてのご相談はこちらから。
