
はじめに
こんにちは。GDAI事業部Lakehouse部の坂下です。
ビジネスの現場では、常に「次に何が起こるか?」という問いに直面します。過去のデータを見るだけでなく、未来を予測できれば、より迅速で正確な意思決定が可能になります。しかし、予測モデルの構築は専門知識が必要でハードルが高いと感じていませんか?
本ブログでは、データサイエンスの知識がなくても、DatabricksとTableauを組み合わせて、たった数ステップで売上予測ダッシュボードを作成する方法を解説します。
具体的には、まずDatabricksで予測に必要なデータの準備を行い、次にTableauで予測機能を使ってダッシュボードを開発します。
Databricks編:予測用データの準備
予測モデルを構築するには、まずモデルに学習させるためのデータが必要です。Databricksでは、CSVやParquetなどの様々な形式のデータを取り込み、処理することができます。今回は、ECサイトのトランザクションログを例に進めます。
1. データの構造と項目
まず、データの内容はECサイト顧客の個々の行動記録のログです、主に使用する項目だけを切り取りました。項目概要は以下です。
- timestamp: 日付時刻情報
- device_type: 購入/閲覧したデバイスのタイプ
- price: 購入/閲覧した商品の価格
- product_category: 商品のカテゴリ
- purchase: 0の場合は購入しなかった、1の場合購入した
2. Databricksでデータの前処理を行う
予測モデルを構築するためには、予測したい項目(目的変数)と、その予測に影響を与える項目(特徴量)を明確にする必要があります。売上予測の場合、データを用意下記のように前処理を行います。
timestamp列はセッションごとに行があるため、Tableauで分析しやすいように日次で集計する必要があります。
ステップ1:必要なライブラリのインポート
まず、PySparkでデータ集計に必要な関数をインポートします。
from pyspark.sql.functions import col, sum, avg, max, date_trunc, when
ステップ2:日次での集計と新しい列の作成
timestamp列を使って日ごとにデータをグループ化し、各日のtotal_sales(合計売上)、avg_discount(平均割引率)、is_promotion_day(プロモーションの有無)、sales_from_electronics(Electronicsカテゴリからの売上)を計算します。
# df は元のデータセットが格納された DataFrame # 例:df = spark.read.table("your_original_table") aggregated_df = df.groupBy(date_trunc("day", col("timestamp")).alias("date")) \ .agg( sum(col("price")).alias("total_sales"), avg(col("discount")).alias("avg_discount"), max(when(col("discount") > 0, 1).otherwise(0)).alias("is_promotion_day"), sum(when(col("product_category") == "Electronics", col("price")).otherwise(0)).alias("sales_from_electronics") ) \ .orderBy("date") # 集計結果の確認 aggregated_df.display()
この集計により、以下のような新しいデータセットを作成できます。
- date: 日単位にグループされた日付
- total_sales: その日の合計売上(予測したい項目)
- is_promotion_day: 各日にプロモーションが行われたかどうかを示すフラグを作成します。
- avg_discount: その日の平均割引率
- sales_from_electronics: Electronicsカテゴリからの売上
ステップ3:集計済みデータをDeltaテーブルとして保存
最後に、作成した集計済みデータセットを、Tableauが直接アクセスできるようにDeltaテーブルとして保存します
aggregated_df.write.format("delta").mode("overwrite").saveAsTable("daily_sales_features")
Tableau編:予測ダッシュボードの作成
Databricksで前処理したテーブルをTableauに接続し、売上予測ダッシュボードを作成します。
1. Databricksとの接続
- Tableauを開き、「サーバーに接続」から「Databricks」コネクタを選択します。
- ホスト名やアクセストークンを入力して接続し、Databricksで生成された予測結果テーブルを読み込みます。
さらに詳しい手順はこちらをご参照ください。
入門編:Tabelau DesktopをAzure Databricksに接続する – APC 技術ブログ
2. Tableauで売上予測を作成
Tableauの予測機能は、過去のデータパターンに基づいて将来の予測値を自動的に計算し、グラフ上に表示します。この機能は、指数平滑化の一種であるHolt-Wintersアルゴリズムを使用しており、季節性やトレンドを考慮した予測が可能です。
-
dateを行、total_salesを列に配置してグラフを作成します。
-
左側の「アナリティクス」ペインを開き、「予測」をビューにドラッグ&ドロップします。
青い部分は未来6ヶ月推定の売上金額となります。
3. Tableauで購入トレンドを分析する
ここでは、「デバイスタイプ」ごとの月次「購入数」を分析します。
この分析は、どのデバイスからの購入が多いか、そしてそのトレンドが時間とともにどう変化しているかを理解するのに役立ちます。
作成手順は以下となります。
グラフの作成
- dateを「売上月」という粒度で列シェルフに配置します。
- Device Typeを色または詳細シェルフにドラッグ&ドロップします。
- Purchase(合計)を行シェルフにドラッグ&ドロップします。
これにより、デバイスタイプ別に月次の購入数の折れ線グラフが作成されます。
トレンドラインの追加
- 画面左側の「アナリティクス」ペインに切り替えます。
2.「モデル」セクションにある「傾向線」をビューに直接ドラッグ&ドロップし、「線形」モデルを選択します。 - 作成されたトレンドラインを右クリックし、「傾向モデルの説明」を選択します。
最後に、これらのグラフを一つのダッシュボードにまとめると下記ようになります。
フィルターを追加すれば、よりインタラクティブな分析が可能になります。
※Tableauの予測アルゴリズムについて
Tableauの予測機能は、指数平滑化モデル(Exponential Smoothing Models)をベースにしています。これは、過去のデータに重みをつけて将来を予測する手法です。特に、季節性やトレンドを持つ時系列データに適しており、売上データやウェブサイトのトラフィック予測など、ビジネスの多くの場面で有効です。
Tableauは、Holt-Wintersアルゴリズムを主に使用し、データのパターンを自動的に検出して最適なモデルを適用します。このアルゴリズムは、トレンド、季節性、ランダムノイズの3つの要素を考慮して予測を生成します。
信頼性について
提供されている予測機能の信頼性は、データの性質に大きく依存します。
- 適用できるデータパターン: Holt-Wintersアルゴリズムは、明確なトレンドや季節性を持つデータに特に有効です。突発的なイベント(例:大規模なプロモーション、パンデミックなど)によるデータの急激な変動には、予測の精度が低下する可能性があります。
- データの量と質: 十分な期間のデータ(最低でも季節性のサイクルを2回以上含むデータ)と、欠損値が少ない質の高いデータを用意することで、予測の信頼性が向上します。
- 予測期間: 長期間の予測は、不確実性が高まるため、短期間の予測の方が一般的に信頼できます。
詳細な仕組みについては、Tableauの公式ドキュメントで確認できます。
まとめ
本ブログでは、DatabricksとTableauを連携させることで、大規模データの処理からビジネスインテリジェンスの可視化までを一貫して行う方法を解説しました。
DatabricksとTableauを組み合わせれば、以下のことが実現できます。
- データ処理の効率化: Databricksで大規模データを高速に集計・処理できます。
- 直感的な分析: 複雑な分析や可視化をTableauの簡単な操作で行えます。
- ビジネスへの貢献: データから得られた洞察に基づき、より迅速で正確な意思決定が可能になります。
お知らせ
私たちはDatabricksを用いたデータ分析基盤の導入から内製化支援まで幅広く支援をしております。
もしご興味がある方は、お問い合わせ頂ければ幸いです。
また、一緒に働いていただける仲間も募集中です!
APCにご興味がある方の連絡をお待ちしております。