ふくふくHukuhuku Inc.
EP.03Open Data 10分公開: 2026-05-10

気象庁の予報API × POSデータで「翌週の在庫」を当てに行く

気温・降水量と POS 売上の相関を取り、需要予測モデルを最小構成で構築する。

#気象庁#需要予測#POS
CO📔 Google Colab で開く(上から順にセルを実行)
シェア

「アイスは暑い日に売れる、傘は雨の日に売れる」というのは誰でも知っていますが、自社の POS データに気象データを重ねて『先週この気温なら売上が +18%』を実証している小売はそれほど多くありません。今回は、最小構成で需要予測を始める方法を。

気象庁オープンデータの取得方法

気象庁は防災情報ページの裏側で予報・警報を で配信しており、これを実用的に活用しているサービスは多数あります(公式の「正式API」ではなく、防災ページのバックエンドJSONを利用する形です)。過去観測データ(アメダス)は別途ダウンロードサイトから取得します。利用は無料、商用も可能(出典明記必要)。

データ更新頻度用途
過去観測(アメダス)毎時売上相関分析
週間予報1日2回1週間先の在庫計画
時間別予報3時間ごと本日のシフト調整
気象警報随時営業判断(休業・短縮)
季節予報月次中長期商品計画

実装:POS × 気象データの最小構成

気象庁データ取得(地点コード東京: 130000)
Python
import requestsimport pandas as pd
# area_code: 東京=130000、府県予報の地域コード# 一覧は https://www.jma.go.jp/bosai/common/const/area.json で確認できるdef fetch_forecast(area_code: str = "130000"):    """気象庁の地域予報JSONを取得(公式の防災情報ページ裏側のJSON)"""    url = f"https://www.jma.go.jp/bosai/forecast/data/forecast/{area_code}.json"    res = requests.get(url, timeout=15, headers={"User-Agent": "hukuhuku-fetcher"})    res.raise_for_status()    return res.json()

def find_temps(forecast: list) -> list[dict]:    """JMA の forecast JSON は2要素の配列で、index=0=直近3日、index=1=週間予報。    各要素は timeSeries 配列を持ち、その中の dict のうち温度を含むものを探す。    構造は地域・時期で揺れるので、kind を見て決め打ちせず探索する。"""    out = []    for block in forecast:        for ts in block.get("timeSeries", []):            for area in ts.get("areas", []):                if "temps" in area:                    # 直近3日                    out.append({"timeDefines": ts["timeDefines"], "temps": area["temps"], "area": area["area"]["name"]})                if "tempsMin" in area or "tempsMax" in area:  # 週間                    out.append({                        "timeDefines": ts["timeDefines"],                        "tempsMin": area.get("tempsMin"),                        "tempsMax": area.get("tempsMax"),                        "area": area["area"]["name"],                    })    return out

forecast = fetch_forecast("130000")  # 東京都records = find_temps(forecast)for r in records[:5]:    print(r["area"], "|", r.get("timeDefines"))    if "temps" in r:        print("  3日先までの気温:", r["temps"])    if "tempsMax" in r:        print("  週間 最高/最低:", r["tempsMax"], "/", r.get("tempsMin"))

需要予測モデルの設計

過去POS2年分の日次売上商品×店舗単位過去観測気温・降水・湿度アメダス毎時相関分析商品×天候の係数線形回帰予測モデル翌週予報×係数SKU別在庫推奨
POSデータ × 気象データの相関分析→予測モデル

で予測モデル構築

prompt:POS × 気象 の需要予測
自社のPOSデータと気象庁の過去観測データから、商品×店舗単位の需要予測モデルを構築してください。

## 入力
- BigQuery: `pos.daily_sales`(カラム: store_id, sku, sale_date, qty, revenue)
- 気象庁 {{api|*}}: 観測値(過去2年)+ 週間予報

## 必要な処理
1. POS と観測値の日次JOIN(店舗の地域コードでマッピング)
2. SKU × 気象(気温・降水量・湿度)の相関係数を算出
3. 強相関(|r| > 0.5)の SKU を抽出
4. 各SKUに対して線形回帰モデルを学習
5. 翌週の予報値を入れて、SKU×店舗 の推奨発注量を出力
6. 過去1年でバックテスト、MAPE 計測

## 出力
- 学習スクリプト
- 推奨発注量テーブル `mart_recommended_orders`
- バックテストレポート
想定される実行結果(例示)
## 需要予測モデル 構築完了

### バックテスト結果
- 全SKU平均 MAPE: 22.4%
- 強相関SKU(|r| > 0.5)の MAPE: **8.7%**(実用レベル)
- 弱相関SKU(|r| < 0.3)の MAPE: 35%(モデル無効)

### 強相関SKU TOP 5(季節性が顕著)
1. ミネラルウォーター × 気温(r=0.78)
2. 傘 × 降水量(r=0.72)
3. アイスクリーム × 気温(r=0.68)
4. 鍋つゆ × 気温(r=-0.61)
5. ホットコーヒー × 気温(r=-0.55)

### 推奨発注量サンプル(来週東京・最高気温平均32℃想定)
- ミネラルウォーター: +35% (平年比)
- アイスクリーム: +42%
- 鍋つゆ: -28%
- ホットコーヒー: -18%

### 構築物
- `models/forecast_demand.py`
- `mart_recommended_orders` テーブル
- `reports/backtest_2026-q2.md`

PR #234 を生成しました。

データ取得の留意点(2026年5月時点)

気象庁の「API」は公式定義ではない

気象庁が直接「公式API」と銘打って公開しているサービスは限定的で、JSON ファイル配信(XML 電文を JSON 化したもの)が主流です。利用は 公共データ利用規約(第1.0版) に準拠。

  • ライセンス: 公共データ利用規約(第1.0版) ─ 出典記載の上で再利用可。商用利用 OK。
  • 出典記載: 「出典:気象庁ホームページ(URL)」を明記する。
  • 更新頻度: 防災情報は「リアルタイム」配信、予報は数時間ごと。詳細は各データの仕様で確認。
  • API レート制限: 公式に明示された数値制限はないが、気象庁は「商用サービスの基盤として依存しないこと」を従来から要請。本格運用には民間気象会社のAPI(ウェザーニューズ等)を推奨する流れ。
  • サービス安定性: 気象庁サイトは公益インフラだが、サーバー負荷で一時的に応答しない可能性あり。本番運用ではキャッシュ・リトライ・フォールバック必須。
  • 仕様変更: 配信形式・URL は予告なく変更される可能性。ニュース欄・運用情報を定期チェック。
  • 民間ラッパー: 個人開発の 「気象庁 JSON 取得ライブラリ」 に複数存在。MIT などのライセンスで利用可能だが、メンテ状況をチェック。
公式リソース

ホームページ利用規約: https://www.jma.go.jp/jma/kishou/info/coment.html / 防災情報XML電文形式: https://xml.kishou.go.jp/ ─ 商用利用で が必要なら、ウェザーニューズ・日本気象協会・WeatherNews API などの有償サービスへの切替を強く推奨。

次回予告

EP.04 では、国土数値情報を使った立地評価レポートの自動生成方法をお届けします。

シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp