
Tableauの予測機能って使えそうですか?
Tableauには時系列予測機能が付いており、手軽に予測を行うことが可能です。ここでは、それがどれほど使えるものなのかを検証してみます。
課題設計
予測対象 :GDP
期間 :1994/1Q-2021/4Qまでを学習し、2022/1Q-4Qを予測
比較対象 :Prophet
GDPは内閣府が公開している国民経済計算(GDP統計)より取得し、比較対象のアルゴリズムにMeta(旧Facebook)よりリリースされているProphetを採用します。
#Prophetは日本語では預言者という意味になります 。
Tableauによる予測
データをインポートしてアナリティクス>予測を押下するだけで、予測が可能です。

可能なのですが、少々怪しい予測結果となっています。横に平行に線が引かれており、実際に値を確認すると全くの同一の値が横引きで置かれています。

なぜそのような予測になるのか
公式サイトを見ると以下の記載があります。
Tableau の予測機能では、指数平滑法と呼ばれるテクニックが使用されます。予測アルゴリズムは、将来に向けて継続できる規則的なパターンをメジャーに見つけようとします。
指数平滑法はウェイトを調整して移動平均を求める方法で、トレンド等を十分に考慮することができません。直近のコロナ影響を受け上手く予測ができなかったと考えられます。
リベンジ
実のところ、予測にあたってはオプションを選択することが可能です。予測のオプションでは傾向として「なし」「加算」「乗算」を選択することができます。デフォルトでは「なし」となっているので、ここでは「乗算」を選択してみます。

すると予測結果が上向きになり、トレンドを考慮した結果を取得することができました。これをもって、検証を行うこととします。

Prophetによる予測
それでは、prophetにて予測を行います。
!pip install prophet
import prophet
import pandas as pd
# データフレームの作成
df = pd.read_csv('gaku-jk2242.csv', thousands=',')
# Prophetの入力形式に変換
df=df.set_axis(['ds', 'y'], axis=1)
df['ds'] = pd.to_datetime(df['ds'])
# データの先頭5行を表示
print(df.head())
from prophet import Prophet
# モデルの作成
m = Prophet()
# モデルにデータを適合
m.fit(df[:-4])
future = m.make_future_dataframe(periods=4, freq='Q')
forecast = m.predict(future)
#グラフ化
import matplotlib.pyplot as plt
m.plot(forecast)
plt.show()
#精度比較
import numpy as np
from sklearn.metrics import mean_squared_error
#prophetの予測精度
print('prophet RMSE:')
print(np.sqrt(mean_squared_error(df['y'].tail(4), forecast['yhat'].tail(4))))
#tableauの予測精度
l = [542779,543715,544652,545591]
print('tableau RMSE:')
print(np.sqrt(mean_squared_error(df['y'].tail(4), l)))
グラフ化してみると、長期トレンドを考慮し、リーマンショックやコロナ時の落ち込みを外れ値として扱っていることが分かります。しかし、リーマンショックやコロナ禍の一時的なショックは吸収し切れていません。

精度比較
精度を比較するとtableauの方が良い結果を得ました。
prophet RMSE: 3491
tableau RMSE: 2501
※RMSEは正解からの外れ度合を定量的に計る指標で小さければ小さいほど良い精度となります。
まとめ
お手軽な予測機能として、tableauのデフォルト機能は十分使い道があると言いえます。
ポイントとしては、Tableauの予測ロジックは指数平滑法であることより、対象データが以下の場合にTableauの予測機能が特に活きると言えるでしょう。
単調増加(減少)傾向にある
外れ値が無い