嗨!大家好!我是跨領域自學程式的 Eva!歡迎來到我的 Medium!
本篇文章主要想整理資料科學專案的流程,也和大家分享一些學習心得,敘述一些遇到的煩惱和解法,有興趣的話,不妨繼續看下去吧!
■ 資料科學 Data Science
指的是「從資料中提取有價值的內容,找出關係並做出決策」,結合數學、統計、機器學習等領域知識,常見於科技業、金融業、電商、零售業和醫療等產業,以下舉幾個簡單的案例說明:
- 公司想透過 line 官方帳號推銷某商品的促銷活動,希望從十萬會員中篩選出適合的客群。
- 醫師需要一套能快速辨識胸痛患者是否為急性心臟病患者的系統,希望透過血液檢查或病情診斷準確預測。
- 銀行想建立一套客戶信用貸款風險評估的模型,希望在輸入客戶數據後,能快速辨識詐欺案件的機率。
■ 專案流程
資料科學專案的流程大致可分為上圖的五個階段,每個階段中都有其所需的技能和工作目標,以下將分別整理重點並提出收穫:
資料收集
資料的來源基本上來自三個管道:檔案、資料庫、網頁爬蟲,可依據所需情況採用相對應的做法,其中,個人認為檔案、資料庫串接會是實務上比較常用的做法,畢竟公司資料屬於機密,不太可能隨意放上網路供人使用,而網路爬蟲比較適用於資料不齊全時或需要即時追蹤的數據。
- 檔案:
import pandas as pd
# 讀取 csv 檔
df = pd.read_csv('檔案名稱')
# 讀取 excel 檔
df = pd.read_excel('檔案名稱')
2. API:以串接 SQLite 資料庫為例
import pandas as pd
import sqlite3
# 建立 SQLite 資料庫連線
conn = sqlite3.connect('資料庫名稱')
# 使用 SQL 查詢語法讀取資料
df = pd.read_sql_query('SQL查詢操作', conn)
# 關閉資料庫連線
conn.close()
3. 網頁爬蟲:Requests 發送請求,BeautifulSoup 進行解析
BeautifulSoup 常用的解析器有三種 html5lib
、html.parser
、lxml
,三者都可以幫助我們解析內容,但效能、精準度不太一樣,操作時如果遇到警告或錯誤,可嘗試換個解析器。
import requests
from bs4 import BeautifulSoup
# 發出 GET 請求,取得網頁文本資料
r = requests.get('網址')
response = r.text
# 使用 BeautifulSoup 解析資料
d = BeautifulSoup(response,'html5lib')
資料處理
指資料收集後直到模型分析前的過程,這個階段會是整體專案中最重要也最耗費心力的步驟,需要進行資料清理、型態調整、資料探索、視覺化以及特徵工程,個人認為非常考驗三個問題:
- 是否知道自己正在做什麼?為何而做?
舉例,資料清理階段經常會需要刪除、填補,你想過哪些資料需要刪除嗎?刪除比填補好嗎?為什麼用平均數填補,不用中位數?資料型態不符合模型需求,要用 LabelEncoder 還是 OneHotEncoder?兩者有何差異?EDA 結果合理嗎?是否有其他可能性?諸如此類。清楚操作邏輯可以避免陷入迷惘,同時讓自己更有信心!
2. 是否足夠熟悉 Pandas 語法,幫助自己完成操作?
資料需要排序時,能想到 sort_values( )
嗎?需要合併時,能判斷要使用 concat( )
、merge( )
還是 join( )
嗎?需要分組時,能同時搭配 groupby( )
和 agg( )
完成要求嗎?這些操作其實不難,也可以參考官方文件或詢問 ChatGPT,但基礎技能越嫻熟,越能有效率的幫助自己!未來不論碰到面試或有時間要求的專案,都能替自己省下大把時間!
3. 是否耐得住寂寞、具備堅毅不拔的人格特質?
資料處理階段以特徵工程最為複雜,需要全面性了解現有資料,提出假設性問題,並進一步提取有意義的特徵供後續模型使用。這個過程需要高度的專注,腦袋要不斷運轉思考著各種可能性,並且完成特徵抽取,中途可能會卡關而煩悶,一回過神窗外可能就從白天變為黑夜(可能有點誇張),但能否堅持不放棄是決定成敗的重要關鍵!
模型分析
Scikit-learn(簡稱 SKlearn)是一個常見於模型分析的套件,提供多種模型,各自都能單獨開一門課程介紹,相信初學者光是看到大概就快舉白旗投降了!不過,在實作中其實不用自己嚇自己,稍微了解常用模型的概念並且嘗試使用即可,來日方長,慢慢研究就好!
常用的模型大概分為:
- 監督式學習(Supervised learning):從已知答案中找關係
(1) 迴歸(Regression)
- 線性迴歸(Linear Regression)
- 多元迴歸(Multiple Regression)
(2) 分類(Classification)
- 邏輯迴歸(Logistics Regression)
- 最近鄰居演算法(K-Nearest Neighbor, KNN)
- 決策樹(Decision tree)
- 支持向量機(Support Vector Mechine, SVM)
- 簡單貝式分類器(Naive Bayes)
- 隨機森林(Random Forest)
2. 非監督式學習(Clustering):在未知答案下找關係,目的是「分群」
- 聚類分析(K-Means Clustering)
- DBSCAN
- 階層式分群法(hierarchical clustering)
模型優化
考量到模型分析結果未必準確,有可能出現欠擬合(Underfitting)、過度擬合(Overfitting)或偏差問題,該階段使用指標和方法評估模型的表現,常見的有:
- 分類指標:準確率(Accuracy)、精確率(Precision)、召回率(Recall)和 F1 分數(F1 Score)
- 迴歸指標:MAE、MSE、RMSE
- 交叉驗證與學習曲線
- 超參數調整與驗證曲線
這些內容非一篇文章可以簡單說明,有興趣的朋友會建議多參考一些學習文章,未來如果有時間,再寫文章跟大家分享!但總體來說,評估的結果會影響是否繼續使用模型,如果成效不佳,就會換個模型回到模型分析階段重新來過,經過反覆多次的嘗試,最終才會選用符合要求的模型進入下一階段!
應用部署
通常會用資料視覺化的方式,例如製作 Dashboard 將專案內容串接起來,方便解釋和呈現結果,因此,除了需要會技術,也需要一個會說故事的人(Story Teller ),讓使用者快速理解專案的情況!除此之外,也可能走向自動化操作的 MLOps 處理,但這個部分就會偏工程多一點,未來若掌握更完整的知識再來分享!
那完成以上五個階段等同於專案成功嗎?錯!
資料科學專案經常需要循環操作,反覆驗證,無法一步登天!有時可能會遇到網頁改版爬蟲操作出現問題,也可能出現新的特徵影響模型運作、模型錯誤,或者最終 Dashboard 異常等等,因此,專案的執行會有許多突發狀況,需要管理者定期監測、維護與優化!
■ 結語
洋洋灑灑寫了這麼多,初次接觸的朋友大概會霧煞煞,不過沒關係,融會貫通本來就需要時間和經驗,我自己也是等到開始做小小專案,才慢慢理解概念,有效的學習免不了實戰!下一篇文章,我將利用經典案例【鐵達尼號存活預測】分享專案流程,有興趣的朋友可以先追蹤,才不會錯過發文唷!
我是正努力朝資料科學領域前進的 Eva!謝謝你看到最後!
如果喜歡我的文章,歡迎底下拍手鼓勵並點選追蹤唷!我們下次見!