大數據分析

資料內容

原先的資料

  • 資料筆數
    • 4925571 筆
  • 資料欄位
    • 租借時長
    • 租車日期
    • 租車時間
    • 第幾個小時租車的
    • 租車站點名稱
    • 還車日期
    • 還車時間
    • 還車站點名稱

    • 觀測時間(hour)
    • 測站氣壓(hPa)
    • 海平面氣壓(hPa)
    • 氣溫(℃)
    • 露點溫度(℃)
    • 相對溼度(%)
    • 風速(m/s)
    • 風向(360degree)
    • 最大陣風(m/s)
    • 最大陣風風向(360degree)
    • 降水量(mm)
    • 降水時數(h)
    • 日照時數(h)
    • 全天空日射量(MJ/㎡)
    • 能見度(km)
    • 紫外線指數
    • 總雲量(0~10)

清洗後的資料

  • 資料筆數
    • 117822 筆
  • 資料欄位
    • 租借時長
    • 租車日期
    • 氣溫(℃)
    • 降水量(mm)
    • 紫外線指數
    • 相對溼度(%)
  • 處理方式
    • 取出以下租車站點
      • 捷運公館站(2號出口)
      • 捷運科技大樓站
      • 捷運公館站(3號出口)
      • 捷運中山國中站
      • 捷運芝山站(2號出口)
      • 捷運永春站(2號出口)
      • 捷運六張犁站
      • 松山車站
      • 捷運行天宮站(3號出口)
      • 捷運東門站(5號出口)
      • 捷運信義安和站(4號出口)
    • 選出特定的時間區間
      • 2021/9~2022/10
    • 剔除沒有紫外線指數的資料
    • 剔除沒有降水量(mm)的資料
import pandas as pd # 讀取CSV文件 df = pd.read_csv('output_filtered80_modified.csv') column_mapping = { 'sub_IN_MIN': 'rental_period', 'col_4': 'temperature', 'col_6': 'rh', 'col_11':'precp', 'col_16':'uvi' } # 重新命名欄位名稱 df = df.rename(columns=column_mapping) selected_columns = ['rental_period', 'temperature', 'rh', 'precp','uvi','newdate'] place = ['捷運公館站(2號出口)', '捷運科技大樓站', '捷運公館站(3號出口)', '捷運中山國中站', '捷運芝山站(2號出口)', '捷運永春站(2號出口)', '捷運六張犁站', '松山車站', '捷運行天宮站(3號出口)', '捷運東門站(5號出口)', '捷運信義安和站(4號出口)' ] condition = (df['borrow'].isin(place) | df['back'].isin(place)) filtered_df = df.loc[condition,selected_columns] filtered_df = filtered_df[filtered_df['uvi'] != '...'] filtered_df = filtered_df[filtered_df['precp'] != 'T'] # 將修改後的數據保存到新的CSV文件 filtered_df.to_csv('output_trim.csv', index=False)

分析方式

資料

  • feature (輸入模型的資料)
    • 氣溫(℃)
    • 降水量(mm)
    • 紫外線指數
    • 相對溼度(%)
  • target (模型預測的結果)
    • 租借時長

我們將資料以 8:2 的比例分成訓練資料及測試資料集
測試資料集的目的是用來驗證模型學習的好壞

選用的機器學習演算法

選定三種機器學習演算法,分別為 svm, knn 及 linear regression
我們將資料送入模型進行訓練,並將訓練完的模型保存起來

SVM

資料數量: (117822, 5) -> 代表有 117822 筆資料,每筆資料 feature + target 數量等於 5
訓練集均方誤差: 696.0338094251304
訓練集決定係數: -0.048353252269998315
測試集均方誤差: 673.4159879339156
測試集決定係數: -0.048208325512227646
執行時間: 1077.435385942459 秒

KNN

資料數量: (117822, 5)
訓練集均方誤差: 767.8788588645937
訓練集決定係數: -0.1565649371327893
測試集均方誤差: 749.6541616804583
測試集決定係數: -0.1668771570737615
執行時間: 0.6420707702636719 秒

Linear Regression

資料數量: (117822, 5)
訓練集均方誤差: 663.6433406837687
訓練集決定係數: 0.00043267276373226693
測試集均方誤差: 641.7846268947011
測試集決定係數: 0.001027594903492357
執行時間: 0.07284665107727051 秒

評量方式

  • MSE (均方誤差)
    • 模型預測的結果與 Ground Truth 的差異取平方 eg. predict: 10 , gt : 15, mse: |10 - 15|^2 = 25
  • R2 Score (決定係數)
    • R2 Score的範圍從0到1,越接近1表示模型的預測能力越好,而越接近0則表示模型的預測能力越差。

結論

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

根據 MSE 和 R2,推論我們選定的 feature 和 target 之間關聯性很差
這個些模型都無法準確地預估騎車時長

改進

資料分布

猜測離群數值影響了訓練結果,導致 MSE 和 R2 表現糟糕

  • 指數版本
  • 一般版本

決定剔除租借 50 分鐘以上的資料

  • 資料數量
    • 113544 筆

重新進行實驗

SVM

資料數量: (113543, 5)
訓練集均方誤差: 19.85358104962295
訓練集決定係數: -0.05685092004902881
測試集均方誤差: 20.18769123097845
測試集決定係數: -0.05967403496688384
執行時間: 437.2216897010803 秒

KNN

資料數量: (113543, 5)
訓練集均方誤差: 21.7633890393465
訓練集決定係數: -0.15851430893647867
測試集均方誤差: 22.54635254744815
測試集決定係數: -0.18348275215730436
執行時間: 0.6538197994232178 秒

Linear Regression

資料數量: (113543, 5)
訓練集均方誤差: 18.7659251205485
訓練集決定係數: 0.0010474594154125105
測試集均方誤差: 19.039891009537513
測試集決定係數: 0.0005752564490546508
執行時間: 0.06607651710510254 秒

結論 MSE 降低很多
但 r2 表現仍不是很好 (可以考慮不要放)