SARIMAX

SARIMAによる時系列からの予測ツールができた、といっても祝祭日変数、曜日変数、閏年変数が加味されていません。
X12Aでは、Holiday.datをSpecファイルで指定することで加味されています。(閏年に関してはleapyear指定で勝手にやってくれる?)
Pythonでは外部変数として渡してやらないといけないようです。
でも、どうすればよいのか、なかなか調べることができません。
AIも聞くたびに微妙に違うことを言ってくるし。
多分確かなのは、祝日が毎年同じでないときには、SARIMAではなくSARIMAXを使わなければならないらしい、ということ。
ならばせめて、SARIMAXで祝日変数だけでも対応したいと考えていますが、
本家Pythonと違い、使えるLibraryにも制限があるので、できるかどうかはわかりません。
できたとしても、ギリか。
「Pythonで始める時系列分析」
https://stern-bow.hatenablog.com/entry/2024/11/17/170224
おもしろそうだけど、わかるのは松田さんだけかも。

PowerQuery
PowerQuery

40 15 0 255 240 10

AI による概要
Excel上のPython(Python in Excel)でjpholidayライブラリを使用して、日本の祝日を判定・取得する方法を説明します。Python in Excelは2024年9月に正式リリースされ、Anaconda環境のライブラリ(jpholidayを含む)が利用可能です。

基本的な手順
セルでPythonモードを有効にする: セルに =PY( と入力するか、[数式] タブから [Pythonの挿入] を選択します。
ライブラリをインポート: import jpholiday を使用します。
日付データを指定: Excelのセル上の日付を参照する場合、xl() 関数を使用します(例:xl("A1"))。

具体的な使用例(コード)
以下をPythonの入力欄(コードエディタ)に貼り付けて使用してください。

  1. 指定日が祝日かどうか判定する
    セルA1の日付が祝日か判定し、祝日ならTrue、平日ならFalseを返します。
    python
    import jpholiday
    import datetime

ExcelのA1セルに日付データが入っていると想定

dt = xl("A1")
is_holiday = jpholiday.is_holiday(dt)
print(is_holiday)

  1. 祝日名を取得する
    祝日の場合はその名前(例:元日、振替休日)を、平日の場合はNoneを返します。
    python
    import jpholiday
    import datetime

dt = xl("A1")

祝日名を取得

holiday_name = jpholiday.is_holiday_name(dt)
print(holiday_name)

  1. 平日・土日・祝日を判別する
    python
    import jpholiday
    import datetime

A1セルの日付を取得

dt = xl("A1")

if jpholiday.is_holiday(dt) or dt.weekday() >= 5:
result = "休日(土日祝)"
else:
result = "平日"
print(result)

  1. 指定した年(例: 2025年)の祝日一覧を取得する
    python
    import jpholiday

2025年の祝日リストを取得

holiday_list = jpholiday.year_holidays(2025)

pandas DataFrameにして出力すると見やすい

import pandas as pd
df = pd.DataFrame(holiday_list, columns=['Date', 'HolidayName'])
print(df)

https://qiita.com/KENTAROSZK/items/0606c158fa692b73c550

import pandas as pd
import statsmodels.api as sm
import jpholiday # 祝日取得用ライブラリ

1. サンプルデータ作成(月次データ)

data = pd.DataFrame({
'date': pd.date_range(start='2023-01-01', periods=24, freq='M'),
'sales': [100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210] * 2
})
data.set_index('date', inplace=True)

2. 祝日フラグ作成(月内の祝日日数)

data['holiday_count'] = data.index.map(lambda x: len(jpholiday.month_holidays(x.year, x.month)))

3. SARIMAXモデル構築

order=(p,d,q), seasonal_order=(P,D,Q,s)

model = sm.tsa.statespace.SARIMAX(
data['sales'],
exog=data['holiday_count'],
order=(1, 1, 1),
seasonal_order=(1, 1, 1, 12)
)
results = model.fit()

4. 未来予測(来月、祝日が2日あると仮定)

forecast = results.forecast(steps=1, exog=[2])
print(forecast)
ポイント
祝日フラグ: {Link: Qiita https://qiita.com/KENTAROSZK/items/0606c158fa692b73c550}では、祝日をTrue/Falseのフラグとして追加しています
外生変数(exog): {Link: note https://note.com/lucky_daisy148/n/na3d7d31358f8}によると、SARIMAXは祝日や気温など複数の外部影響を組み込めるため、売上予測に向いています
jpholiday: 日本の祝日取得にはjpholidayライブラリが便利です。

指定年別: jpholiday.year_holidays(2023)のように年を指定。
データ構造: (日付, 祝日名) のタプルリスト。
期間指定: jpholiday.between(start_date, end_date)で柔軟な期間指定も可能。
対応範囲: 1948年の祝日法施行以降のデータに対応。