売掛金の入金予測から13週の資金繰り表を作る
売掛金の残高一覧と過去3年の入金実績を入力に、請求1件ごとに「支払期日どおりに入金されるか」の確率を予測し、週別の入金見込みを積み上げる構成です。標準ケースと悲観ケースの2本を出します。
- 利用ツール
- ChatGPT/Claude/Gemini/Python
- 対象業界
- 商社/建設/物流/製造
- 対象部門
- 財務
- 対象業務
- 書類作成/集計・分析
- 主な課題
- データ分析に時間がかかる/判断に時間がかかる/期限・対応漏れが起きる
- AIで行う処理
- 予測
- 主な効果
- 判断支援/工数削減/機会損失防止
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- 個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 週明けに販売管理システムから売掛金の残高一覧をエクスポートする
- 支払期日ごとに金額を集計する
- 期日が近い先について、営業担当に「入りそうか」を確認する
- 過去に遅れた先は、担当者の経験で入金週をずらす
- 支払予定(買掛金、給与、社会保険、税金、借入返済)を並べる
- 13週分の資金繰り表に転記し、検算する
- 資金が不足する週があれば、借入枠の使用や支払時期の調整を検討する
- 経営会議向けに、前週からの変化を説明する文章を付ける
- 自動販売管理と会計から、売掛金残高、入金実績、取引先マスタを取り出す
- 自動請求1件ごとに、過去の遅延実績などの特徴量を作る
- 自動支払期日から5営業日以内に入金される確率を予測する
- 自動確率と金額から、週別の入金見込みを標準ケースと悲観ケースで積み上げる
- 自動遅延確率が高く金額の大きい先を、確認すべき順に並べる
- 人財務が上位30社と大口先だけ、営業または取引先に確認する
- 自動支払予定を差し込み、13週の資金繰り表を作る
- 自動前週の見込みからの差がどこから来たかを、説明文の下書きにする
- 人財務責任者が内容を確認し、資金繰り表を確定する
- 自動翌週、実際の入金と先週の予測を突き合わせて記録する
各工程の詳しい説明を読む
- 週明けに販売管理システムから売掛金の残高一覧をエクスポートする
- 支払期日ごとに金額を集計する
- 期日が近い先について、営業担当に「入りそうか」を確認する
- 過去に遅れた先は、担当者の経験で入金週をずらす
- 支払予定(買掛金、給与、社会保険、税金、借入返済)を並べる
- 13週分の資金繰り表に転記し、検算する
- 資金が不足する週があれば、借入枠の使用や支払時期の調整を検討する
- 経営会議向けに、前週からの変化を説明する文章を付ける
問題は4つあります。
(a)営業への確認が集まらない。 600社を営業30名に照会しても、返ってくるのは一部です。返ってこない先は「期日どおり」として置くしかありません。
(b)遅延の見込みが担当者の経験に依存する。 「あの会社は毎回10日遅れる」という知識が、個人の頭の中にあります。担当が変わると精度が落ちます。
(c)週5時間が固定で取られる。 決算期や月末はほかの業務が重なり、更新が後回しになります。更新が止まると、資金繰り表は判断材料として使えなくなります。
(d)予測が当たったかを記録していない。 先週の見込みと実際の入金を突き合わせていないため、どこがどれだけずれる傾向なのかが分かりません。改善の手がかりが残っていません。
- 【自動】 販売管理と会計から、売掛金残高、入金実績、取引先マスタを取り出す
- 【自動】 請求1件ごとに、過去の遅延実績などの特徴量を作る
- 【自動】 支払期日から5営業日以内に入金される確率を予測する
- 【自動】 確率と金額から、週別の入金見込みを標準ケースと悲観ケースで積み上げる
- 【自動】 遅延確率が高く金額の大きい先を、確認すべき順に並べる
- 【人】 財務が上位30社と大口先だけ、営業または取引先に確認する
- 【自動】 支払予定を差し込み、13週の資金繰り表を作る
- 【自動】 前週の見込みからの差がどこから来たかを、説明文の下書きにする
- 【人】 財務責任者が内容を確認し、資金繰り表を確定する
- 【自動】 翌週、実際の入金と先週の予測を突き合わせて記録する
自動化されるのは「集める」「予測する」「積み上げる」「記録する」の4つです。資金繰りの判断と確定は自動化しません。
02今回想定するシステム構成
販売管理システム 会計システム
(売掛金残高・請求明細) (入金実績・支払予定)
│ │
└────────┬───────────────┘
▼ CSVエクスポート(日次)
データの整形・突き合わせ
│
├─ 請求1件ごとの遅延実績(過去36か月)
├─ 取引先マスタ(支払サイト・支払方法・取引年数)
└─ 金融機関の営業日カレンダー
│
▼
予測モデル(期日内入金の確率)
│
├──▶ 週別の入金見込み(標準ケース・悲観ケース)
├──▶ 確認すべき取引先リスト(上位30社)──【人が確認】
│
▼
13週の資金繰り表(支払予定を差し込む)
│
├──▶ 生成AI ── 前週との差分の説明文(下書き)
│
▼【人】財務責任者が確定
│
▼
翌週:実績と予測の突合を記録(精度の実測値)| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 処理エンジン | Python(pandas、scikit-learn) | R、BigQuery ML、Excel+Power Query |
| 生成AI | Claude API | OpenAI API、Gemini API |
| 連携 | 販売管理・会計システムのCSVエクスポート | 各社のAPI連携(製品による) |
| 表の出力先 | Excel(資金繰り表の様式) | BIツール、Googleスプレッドシート |
| 定時実行 | OSのタスクスケジューラ | ジョブ管理ツール、クラウドの定時実行 |
資金繰り表の様式は、公的な書式に合わせておくと後で使いやすくなります。 日本政策金融公庫の国民生活事業では、融資申込の書式として「資金繰り表」「資金繰り表(簡易版)」と、その記入例が Excel と Word で公開されています。自社の様式を独自に作る前に、この形を見てください。 金融機関に提出する場面で、そのまま使えるかどうかが変わります。
03どうやって実装するのか
処理の起点を決める
毎週月曜の始業前(定時実行)を起点にします。加えて、月次の締め処理が終わった翌日に1回走らせます。
前提が1つあります。前週の入金が会計に反映されていることを確認してから走らせてください。 反映前のデータで予測すると、入金済みの請求を「未入金」として扱い、見込みが実態より低く出ます。反映状況をチェックし、未反映なら処理を止めて通知する分岐を入れます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 売掛金残高 | 請求番号、取引先コード、請求日、支払期日、金額、回収条件 | 販売管理システム |
| 入金実績 | 入金日、入金額、充当した請求番号(過去36か月) | 会計システム/販売管理システム |
| 取引先マスタ | 支払サイト、支払方法、業種、取引開始日、与信枠 | 販売管理システム |
| 支払予定 | 買掛金、給与、社会保険料、税金、借入返済、設備投資 | 会計システム/稟議・契約 |
| 資金の現況 | 各口座の残高、借入枠の未使用額 | 銀行、会計システム |
| カレンダー | 金融機関の営業日、祝日 | 社内マスタ |
データの取得方法を決める
売掛金残高と入金実績: 販売管理システムと会計システムからCSVでエクスポートします。APIの有無と仕様は製品によって異なるため、この部分は利用環境に応じた個別確認が必要です。 日次のエクスポートで足ります。リアルタイム連携は必要ありません。
過去の遅延実績: ここが最も手間のかかる部分です。入金実績を「請求1件ごとに、支払期日から何日で入金されたか」という形に組み直す必要があります。入金明細と請求の突き合わせ(消込)が請求単位で残っていれば、そのまま使えます。残っていない場合は、この構成を作る前に消込の整備が必要です。
支払予定: 買掛金と給与は会計システムから、設備投資と一時的な支出は稟議や契約から人が入力します。ここは自動化の対象にしません。
AIへ渡す前に整形する
- 入金と請求の突き合わせ … 一部入金、複数請求のまとめ入金、相殺、振込手数料の差引が混ざります。突き合わせられなかったものは、予測の対象から外して人へ回します。 無理に割り当てると学習データが汚れます
- 遅延日数の算出 … 支払期日と実際の入金日の差を日数で出します。期日が金融機関の休業日なら翌営業日に寄せてから計算します。この調整をしないと、土日の分だけ「遅延」に見えます
- 異常な取引の除外 … 債権譲渡、貸倒、値引き、返品による相殺は、通常の入金とは別の事象です。学習データから外します
- 特徴量の作成 … 次のような項目を作ります
| 特徴量 | 内容 |
|---|---|
| 過去の遅延日数の中央値 | その取引先の、期日からの遅延日数の中央値(直近24か月) |
| 直近3回の遅延の有無 | 直近3件の請求が期日内に入金されたか |
| 請求金額 | 金額そのものと、その取引先の平均額に対する比 |
| 支払サイト | 末締め翌月末、翌々月10日など |
| 支払方法 | 振込、手形、電子記録債権 |
| 取引年数 | 取引開始からの月数 |
| 期日の位置 | 月末か、月初か、期日が休業日に当たるか |
| 業種 | 取引先の業種区分 |
| 残高の推移 | その取引先の売掛残高が増えているか減っているか |
- 学習期間と検証期間を時間で分ける … ここを間違えると、実運用で使えないモデルができます。 データをランダムに分けると、未来の入金実績を使って過去を予測する形になり、検証時の精度が実運用より高く出ます。「直近3か月を検証、それ以前を学習」のように、時間で切ってください
AIに処理させる
| 処理 | 内容 | 使うもの |
|---|---|---|
| 期日内入金の確率 | 請求1件ごとに、支払期日から5営業日以内に入金される確率を出す | 予測モデル |
| 遅延日数の区分 | 遅延する場合、1〜10日/11〜30日/31日以上のどれになるかを出す | 予測モデル |
| 確認優先度 | 金額と遅延確率から、人が確認すべき順に並べる | 計算のみ |
| 差分の説明文 | 前週の見込みからの差がどこから来たかを文章にする | 生成AI |
予測を生成AIにさせないでください。 表形式の数値データの予測では、勾配ブースティングのような表データ向けの手法のほうが精度が出て、どの特徴量が効いているかも確認できます。scikit-learn の HistGradientBoostingClassifier は、欠損値をそのまま扱えます(学習時に、欠損値のあるデータを左右どちらの枝へ送るかを分岐ごとに学習します)。カテゴリ変数も categorical_features で直接指定でき、10,000件以上のデータでは GradientBoostingClassifier より大幅に速いとされています。月1,800件の請求が36か月あれば約6万件になり、この条件に収まります。
生成AIの役割は説明文の下書きだけです。数値を作らせません。
指示内容を固定する
説明文を作らせる部分の指示です。
あなたは財務担当を支援する担当者です。
今週の資金繰り見込みと先週の見込みの差について、経営会議向けの説明文の
下書きを作ってください。
【厳守事項】
- 与えられた数値だけを使ってください。計算し直したり、
記載のない数値を補ったりしないでください。
- 金額と週の対応を変えないでください。
- 「資金が不足する」「借入が必要」といった判断を書かないでください。
差の内訳を事実として述べるだけにしてください。
- 予測は予測、実績は実績と明記してください。混ぜないでください。
- 差の大きい上位5件について、取引先の名前ではなく
「支払サイトが翌々月の先」のような区分で説明してください。
- 200文字以内で書いてください。
【今週の週別見込み(標準ケース・悲観ケース)】
{forecast_this_week}
【先週の週別見込み】
{forecast_last_week}
【差の内訳(金額の大きい上位10件を区分別に集計したもの)】
{variance_breakdown}
取引先名を渡していない点に注意してください。 生成AIへ送るのは集計後の数値と区分だけにします。個別の取引先の支払遅延実績は、取引先の信用に関する情報です。
出力形式を固定する
{
"as_of": "",
"invoice_predictions": [
{
"invoice_no": "",
"customer_code": "",
"due_date": "",
"amount": 0,
"prob_on_time": 0.0,
"delay_bucket": "0 | 1-10 | 11-30 | 31+",
"predicted_week": "",
"confidence": "high | medium | low",
"excluded_reason": ""
}
],
"weekly_forecast": [
{
"week_start": "",
"inflow_standard": 0,
"inflow_pessimistic": 0,
"outflow_scheduled": 0
}
],
"review_list": [
{ "customer_code": "", "amount": 0, "prob_on_time": 0.0, "reason": "" }
]
}
金額は数値型で返します。文字列にするとカンマ入りになり、後段の計算が壊れます。
構造化出力を使う場合、Claude API では output_config.format にJSONスキーマを指定します(旧来の output_format は output_config.format へ移行済みです)。ただしスキーマ側で数値の範囲(minimum / maximum)や文字列の長さを制約することはできません。 確率が0から1の範囲にあるか、金額が負になっていないかは、受け取ったあとに自分で検算してください。
システムへ連携する
出力先は3つです。
| 出力先 | 内容 |
|---|---|
| 資金繰り表(Excel) | 週別の入金見込みと支払予定を、既存の様式に書き込む |
| 確認すべき取引先リスト | 財務が個別確認する上位30社。金額と遅延確率、直近の遅延実績を並べる |
| 実績突合の記録 | 翌週、実際の入金と先週の予測を突き合わせた結果 |
Excel への書き込みは、様式をテンプレート化し、週と項目の交点に値を差し込む方式にします。予測値のセルと、確定した実績のセルを、色で区別して表示してください。 混ざると、金融機関に提出する場面で説明できなくなります。
人が確認する
資金繰り表の確定は、必ず財務責任者が行います。運用が安定しても変えません。
理由は、資金繰りの判断が支払の遅延や借入の実行に直結するためです。予測が外れたときの影響は、工数では測れません。
人が行うのは次の3つです。
- 上位30社と大口先の個別確認 … 遅延確率が高い先、金額が大きい先は、確率ではなく事実を確認します
- 支払予定の入力と確認 … 設備投資や一時的な支出は自動では拾えません
- 資金繰り表の確定 … 予測をそのまま使わず、悲観ケースを見て判断します
この構成で減らしているのは「集める時間」であって、「判断の責任」ではありません。
例外に対処する
| 起きること | 対応 |
|---|---|
| 新規取引先で実績がない | 予測しない。支払サイトどおりに入ると仮定し、別枠で「実績なし」と表示する |
| 入金と請求が突き合わせられない | 予測対象から外し、excluded_reason を付けて人へ回す |
| 相殺・債権譲渡・値引き | 通常の入金と扱いを分ける。学習データからも外す |
| 大口1件で表全体が動く | 金額上位の先は確率で扱わず、個別確認の対象にする |
| 支払期日が金融機関の休業日 | 翌営業日に寄せる。休業日カレンダーを持たせる |
| 取引開始から1年未満で学習データが少ない | 同じ業種・支払サイトの平均に寄せる。confidence を low で返す |
| 前週の入金が会計に反映されていない | 処理を止めて通知する。 未反映のまま予測しない |
| 予測が外れて資金が不足しかけた | 単一の数字を出さない設計にする。標準ケースと悲観ケースを併記し、判断は悲観ケースで行う |
| モデルの精度が落ちてきた | 月次で実績と突き合わせ、誤差が基準を超えたら再学習する |
| 取引先コードの桁数が変わった、統合された | マスタの変更履歴を持たせ、過去実績を引き継ぐ |
記録を残す
- 各週の予測値(請求単位と週別集計の両方)
- 実際の入金と、予測とのずれ
- 人が確認した先と、その結果(入金予定日の変更など)
- 財務責任者が確定した資金繰り表の版
- 使用したモデルの版と、学習に使った期間
「実際の入金と予測とのずれ」の記録が、この構成の中心です。 これがなければ、精度が上がっているのか下がっているのかが分かりません。
記録する形は「取引先区分ごとの、週別入金額の誤差率」にします。「支払サイトが翌々月の先は、いつも1週遅れる」と分かれば、特徴量を足すか、運用で調整できます。
04実装レベルの3段階
半自動化までで、工数削減の大半が取れます。 抽出・整形・転記・検算が消えるためです。本格構成で得られるのは、工数ではなく精度と再現性です。担当者の経験に頼らずに済むこと、予測のずれを測れることが価値になります。 中央値ベースで誤差が小さい企業は、半自動化で止めてください。 本格構成に進む判断は、前章の誤差率で決まります。
05工数削減シミュレーション
導入後 5件 × 90分 ÷ 60 = 7.5 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 売掛先が100社以上あり、支払期日どおりに入金されない先が一定数ある企業。週次で資金繰りを見ている、または見る必要がある規模。入金消込のデータが請求単位で残っていること。
- 売掛先が数十社で、入金予定を担当者が把握できている場合。現金商売が中心で売掛金が少ない場合。入金消込が請求単位で記録されていない場合(まず消込の整備が先)。
07最小構成で試す方法
機械学習を使わずに試せます。先にこれをやってください。
- 過去24か月の入金実績から、取引先ごとに「支払期日から何日で入金されたか」の中央値を出す
- その中央値を支払期日に足して、請求1件ごとの入金週を推定する
- 週別に金額を積み上げる
- 直近3か月について、この推定と実際の週別入金額を比べ、誤差率を測る
この検証だけは必ずやってください。 中央値だけで足りる企業は少なくありません。
| 週別入金額の誤差 | 判断 |
|---|---|
| ±10%以内 | 中央値ベースで十分。機械学習を入れる必要はない。 集計の自動化だけを進める |
| ±10〜25% | 機械学習を試す価値がある。特徴量を足して改善するかを見る |
| ±25%超 | まず消込データの品質を確認する。予測の問題ではなく、データ整形の問題である可能性が高い |
Excel と関数だけで、この検証はできます。ここで誤差が小さいのに機械学習を作ると、費用と保守の手間だけが増えます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 検証では精度が高いのに実運用で外れる | 学習と検証をランダムに分けている。時間で分ける(直近3か月を検証) |
| 確率を金額に掛けた見込みが実態とずれる | 予測確率が実際の発生率と合っているかを、確率帯ごとに実績と突き合わせて確認する。ずれていれば補正する |
| 消込できないデータが多く学習が進まない | 予測より前に消込の整備が必要。一部入金とまとめ入金の扱いを先に決める |
| 大口1件で表が大きく動く | 金額上位の先は確率で扱わず、個別確認の対象として別枠で表示する |
| 単一の数字を出してしまった | 標準ケースと悲観ケースの2本を出す。判断は悲観ケースで行う |
| 取引先コードをそのままカテゴリ変数にした | HistGradientBoostingClassifier は1つのカテゴリ特徴量あたり max_bins 以下のユニーク値までしか扱えない。600社を直接入れず、業種・支払サイト・支払方法などの区分に置き換える |
| 欠損値の穴埋め方法で悩んだ | この手法は欠損値をそのまま扱える。無理に平均値で埋めると情報が消える |
| データ件数が少ないのに重い手法を選んだ | この手法が速いのは10,000件以上の規模。少なければ中央値ベースで足りる |
| 構造化出力のスキーマに範囲制約を書いた | minimum / maximum などの数値制約は使えない。受け取ったあとに検算する |
| 土日の分だけ「遅延」と判定された | 支払期日を金融機関の営業日に寄せてから遅延日数を計算する |
| 前週の入金が未反映のまま予測した | 反映状況をチェックし、未反映なら処理を止める |
| モデルが陳腐化した | 月次で実績と突き合わせ、誤差が基準を超えたら再学習する。基準を先に決めておく |
| 予測値と確定値が混ざった表を提出した | セルの色で区別する。金融機関向けには確定値だけを使う |
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 取引先ごとの売掛残高、支払遅延の実績、与信枠、自社の口座残高と借入枠。取引先の支払遅延実績は、その取引先の信用に関する情報です。
- 生成AIへ渡すのは集計後の数値だけにする … 取引先名、取引先コード、個別の遅延実績を外部サービスへ送らない設計にします。説明文の生成には、区分別に集計した数値で足ります
- 予測を与信判断に使う場合の扱い … 遅延確率を根拠に取引条件を変えたり取引を止めたりする場合は、人が判断し、根拠を説明できる形にしてください。 予測値だけで自動的に条件を変える運用にしないでください
- 自社の資金情報の管理 … 口座残高、借入枠の未使用額、資金が不足する見込みの週は、社内でも限られた範囲の情報です。アクセス権限を財務に限定してください
- 金融機関への提出資料 … 予測値と確定値を区別して表示します。予測を実績として提出しないでください
- 学習利用 … 生成AIに集計値のみを渡す設計でも、入力を学習に使わないことが契約で保証されるサービスを選んでください
- モデルの版と根拠の保存 … どの版のモデルが、どの期間のデータで学習され、どの予測を出したかを残します。あとから説明を求められる可能性がある領域です
誤りが起きた場合のリスクは、資金不足の見落としと、取引先の信用に関する誤った判断です。1つ目は悲観ケースの併記と人による確定で、2つ目は予測を判断材料の1つに限定することで対処します。
10まず何から始めるか
1週目:消込データが取れるかを確認する
販売管理システムまたは会計システムから、「入金明細と請求番号の対応」が請求単位で取り出せるかを確認します。取り出せなければ、この構成は作れません。 その場合は、まず消込の整備を検討してください。
2週目:中央値ベースで3か月分を検証する
取引先ごとの遅延日数の中央値で入金週を推定し、直近3か月の実際の週別入金額と比べます。誤差が±10%以内なら、予測モデルは作らず、集計の自動化だけを進めてください。
3〜4週目:誤差が大きければ機械学習を試す
学習と検証を時間で分けて、期日内入金の確率を予測します。予測確率と実際の発生率が確率帯ごとに合っているかを確認します。中央値ベースより誤差が小さくなるかを見ます。
2か月目:標準・悲観の2ケースで4週間運用する
実際の資金繰り表の作成に並行して使い、毎週、予測と実績を突き合わせて記録します。この4週間の記録が、本格構成に進むかどうかの判断材料になります。
3か月目以降: 差分の説明文の生成と、実績突合の自動記録を作ります。並行して、資金繰り表の様式を日本政策金融公庫の書式と見比べ、金融機関に出せる形になっているかを確認してください。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
scikit-learn の HistGradientBoostingClassifier が欠損値を標準で扱えること(学習時に分岐ごとに左右どちらへ送るかを学習する)。categorical_features でカテゴリ変数を直接指定できること(既定は from_dtype、1つのカテゴリ特徴量あたり max_bins 以下のユニーク値まで)。predict_proba で確率を返せること。10,000件以上のデータでは GradientBoostingClassifier より大幅に速いこと | scikit-learn: HistGradientBoostingClassifier | 2026-09-09 |
| 日本政策金融公庫(国民生活事業)が、融資申込の書式として「資金繰り表」「資金繰り表(簡易版)」を Excel と Word で、記入例を Excel で公開していること | 日本政策金融公庫: 各種書式ダウンロード(国民生活事業) | 2026-09-09 |
Claude API の構造化出力が output_config.format でJSONスキーマを指定する方式であること(旧 output_format から移行済み)。スキーマで minimum / maximum などの数値制約と minLength / maxLength などの文字列制約が使えないこと | Claude Docs: Structured outputs | 2026-09-09 |
販売管理システムと会計システムからのデータ取得方法(API/CSVエクスポート)は製品によって異なります。この部分は利用環境に応じた個別確認が必要です。 資金繰り表の様式と金融機関への提出要件についても、取引金融機関に確認してください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。予測の精度に関する記述は、自社データでの実測を前提としています。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0023)についてのご相談はこちらから。
