📌

Databricksを用いたフードデリバリー時間予測プロジェクト(という仮定でchatgptに課題を作らせてアウトプット)

に公開

Databricksを用いたフードデリバリー時間予測プロジェクト(という仮定でchatgptに課題を作らせてアウトプット)

🧭 背景と目的

※本文も大いにchat-gptを使ってるよ
昨今のフードデリバリー市場の拡大に伴い、配達の迅速化・効率化は顧客満足度やリピート率に直結する重要課題となっております。本プロジェクトでは、実際のフードデリバリーデータを活用し、配達時間に影響を与える要因を特定し、分析モデルによる理解と予測を行うことを目的としております。

📦 使用データセット

  • データ名: Food Delivery Time Prediction
  • URL: https://www.kaggle.com/datasets/shrutimehta/food-delivery-time
  • 主なカラム:
    • Delivery_person_Age
    • Delivery_person_Ratings
    • Restaurant_latitude
    • Restaurant_longitude
    • Delivery_location_latitude
    • Delivery_location_longitude
    • Weather_conditions
    • Road_traffic_density
    • Vehicle_condition
    • Time_taken(min)(目的変数)

🧱 使用技術・環境

項目 内容
分析基盤 Databricks
ストレージフォーマット Delta Lake
カタログ管理 Unity Catalog(予定)
分析ライブラリ PySpark / Pandas
可視化ツール Databricksノートブック
可視化方式 display(), matplotlib など

🎯 分析ゴール

  • 配達時間に影響を与えている要因(例:天候・交通状況・車両状態など)の特定
  • 要因間の関係性と傾向の可視化
  • 単回帰・多変量回帰による配達時間予測モデルの構築
  • データパイプラインとETL処理を通じた再現性の高い分析環境の構築

🔧 構築手順

① データ取得とアップロード

  1. Kaggleからデータセットをダウンロード
  2. Databricksでボリュームを作成
  3. ボリュームにアップロード

② データ取り込みとDelta変換

Spark DataFrameとして読み込み、Deltaフォーマットで保存。スキーマも明示的に定義予定。

# スキーマ定義
schema = StructType([
    StructField("_c0",StringType(), True),
    StructField("ID", StringType(), True),
    StructField("Delivery_person_ID", StringType(), True),
    StructField("Delivery_person_Age", IntegerType(), True),
    StructField("Delivery_person_Ratings", DoubleType(), True),
    StructField("Restaurant_latitude", DoubleType(), True),
    StructField("Restaurant_longitude", DoubleType(), True),
    StructField("Delivery_location_latitude", DoubleType(), True),
    StructField("Delivery_location_longitude", DoubleType(), True),
    StructField("Time_Orderd", StringType(), True),
    StructField("Time_Order_picked", StringType(), True),
    StructField("Weather_conditions", StringType(), True),
    StructField("Road_traffic_density", StringType(), True),
    StructField("Type_of_order", StringType(), True),
    StructField("Type_of_vehicle", StringType(), True),
    StructField("multiple_deliveries", IntegerType(), True),
    StructField("Time_taken_min", IntegerType(), True)     
])

# スキーマ適用しつつデータフレーム作成
df = spark.read.option("header","true").schema(schema).csv(path_data)
#デルタテーブル化
df.write.format("delta").mode("overwrite").saveAsTable(path_delta_table)

③ カタログへの登録(任意)

Unity Catalogへの登録を通じて、テーブル管理やガバナンスの向上を目指す。

(SQL / Python コード)

pass

④ ETL処理(前処理・クレンジング・型変換など)

  • 欠損値の補完
  • データ型の明示的変換(例:年齢→整数)
  • カテゴリ変数の整形・整理(例:天候の表記揺れなど)

(コード挿入用スペース)

⑤ 分析モデルの構築(集計・傾向抽出)

  • 距離・交通・天候ごとの配達時間平均の算出
  • 配達員特性(評価・年齢・車両)による配達傾向の可視化

(コード挿入用スペース)

⑥ 可視化(グラフ・統計出力)

  • 交通状況別・時間帯別ヒートマップ
  • 配達距離と配達時間の散布図
  • 配達員評価と時間の関係性(箱ひげ図など)

(コード挿入用スペース)

📊 主な分析結果と考察

(※Step3〜5完了後に記入予定)

📝 結論と今後の展望

(※Step6終了後に記入予定)

🔚 実行環境・依存パッケージ

  • Databricks Runtime: 13.3 LTS
  • Pythonバージョン: 3.10
  • 使用ライブラリ: PySpark, pandas, seaborn, matplotlib など

Discussion