機器學習實用技巧:用多進程加速你的特徵工程

閱讀時間約 11 分鐘

在數據科學和機器學習中,特徵工程是提高模型性能的關鍵步驟之一,通過創建新特徵或轉換現有特徵,我們可以更好地捕捉數據中的信息,提高模型的預測能力。然而,當處理大數據集時,特徵工程可能變得耗時,而且若是在研發階段,特徵其實是需要快速迭代去產生並且做後續的實驗,這也是近期遇到的問題,因此想在這篇文章實作多進程的優化。那要執行特徵工程的流程,其實有很多個選擇,在本次文章中,想分享最近實做的一種方法,雖然他不是最好的,但它是可行的,如果有比較建議的方法歡迎分享交流,一起學習成長!

bing image creator

bing image creator

目的

使用Python的多進程功能來加速特徵工程,並將結果存儲在SQLite數據庫中,這可以達到快速產生特徵,並且在RAM資源有限的情況下,可以如預期執行。

主要用到的 python package

  • Pandas:處理數據
  • SQLite:資料庫
  • Multiprocessing:多線程處理

流程

  1. 建立模擬資料
  2. 寫特徵工程 function
  3. multiprocess function 執行

建立模擬資料

num : 表示帳戶號碼,建立100個帳戶

date : 表示交易日期,建立交易日期在 2023-10-20 到 2023-10-30日之間

time : 表示交易時間,一天24 小時內都可以

amount : 這筆交易的金額,金額範圍 1- 1000000

sample 如下:

sample data

sample data

import pandas as pd
import numpy as np
import random
from faker import Faker
from datetime import datetime, timedelta


np.random.seed(0)
random.seed(0)


fake = Faker()
data = pd.DataFrame(columns=['num', 'date', 'time', 'amount'])

account_numbers = [fake.unique.random_number(digits=6) for _ in range(100)]


for _ in range(1000):
acct_num = random.choice(account_numbers)
date = (datetime(2023, 10, 20) + timedelta(days=random.randint(0, 10))).date()
time = fake.time(pattern='%H:%M')
amt = random.randint(1, 1000000)

data = pd.concat([data, pd.DataFrame({'num': [num], 'date': [date], 'time': [time],
'amount': [amount]})], ignore_index=True)


data.to_csv('data/transaction.csv', index=False)


寫特徵工程 function (舉例幾個特徵)

import multiprocessing
import sqlite3
import pandas as pd


def create_db_connection():
return sqlite3.connect('mydatabase.db')


def calculate_average_amount(data, num):

average_amount = data.groupby('num')['amount'].mean().reset_index()
print(average_amount)
return average_amount


def calculate_variance(data, num ):

variance_data = data.groupby('num')['amount'].var().reset_index()
variance_data.rename(columns={'amount': 'amount_variance'}, inplace=True)

return variance_data



def calculate_time_diff(data):
account_data = data.copy()
account_data['time'] = pd.to_datetime(account_data['time'], format='%H:%M')


account_data = account_data.sort_values(by=['date', 'time'])
account_data['time_diff'] = account_data['time'].diff().dt.total_seconds() / 60.0

return account_data[['num', 'time_diff']]


def calculate_average_time_diff(time_df):

average_time_diff = time_df.groupby('num')['time_diff'].mean().reset_index()
average_time_diff.rename(columns={'time_diff': 'time_diff_mean'}, inplace=True)

return average_time_diff

def process_feature(data,num):
print('in function process_feature: ',data.shape)
data = data[data['num'] == num]
ori_df = calculate_average_amount(data, num)
output_df = calculate_variance(data,num )
output_df = ori_df.merge(output_df, on='num')
print(output_df.columns)

time_df = calculate_time_diff(data)
time_df_o = calculate_average_time_diff(time_df)
print(time_df_o.columns)
output_df = output_df.merge(time_df_o, on='num')

return output_df


multi-process 完成

import multiprocessing
import sqlite3
import pandas as pd
from feature import calculate_average_amount, calculate_variance, process_feature
from functools import partial

def create_db_connection():
return sqlite3.connect('feature.db')

def process_acct_num(num, data):

output_df = process_feature(data,num)
conn = create_db_connection()
output_df.to_sql('feature', conn, if_exists='append', index=False)

conn.close()

if __name__ == '__main__':

data = pd.read_csv('./data/transaction.csv')
nums = data['num'].unique()
start_date, end_date = '2023-10-20' , '2023-10-30'

num_processes = multiprocessing.cpu_count()
print(num_processes)
num_processes = num_processes-2

process_acct_num_partial = partial(process_acct_num, data=data)

with multiprocessing.Pool(num_processes) as pool:
pool.map(process_acct_num_partial, nums)


小心得

我們使用 Python 和多進程來進行特徵工程的例子,並將結果存儲在 SQLite 數據庫中。這個例子展示了對於一個交易數據集,如何計算每個帳戶的平均交易金額,特徵可以根據現實的情況擴增,這裡只展示一個框架。

過程中利用了 Python 的 multiprocessing 模塊,有效地利用了多核 CPU 資源,加快了大量數據的處理速度,特別是在處理大型數據集時,使用多進程可以顯著提高效率。

最後,我們將計算完的特徵通過 SQLite 數據庫進行了存儲,這樣不僅便於管理和存取這些數據,也為後續的數據分析和機器學習建模提供了方便。透過這篇文章,記錄下前些日子在資源有限的情況,可以 work 的 solution 。

歡迎交流~分享~一起成長!

avatar-img
32會員
40內容數
歡迎來到《桃花源記》專欄。這裡不僅是一個文字的集合,更是一個探索、夢想和自我發現的空間。在這個專欄中,我們將一同走進那些隱藏在日常生活中的"桃花源"——那些讓我們心動、讓我們反思、讓我們找到內心平靜的時刻和地方
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Karen的沙龍 的其他內容
1. 問題定義 每一個成功的模型都始於明確的問題定義! 核心思考:你的模型想要達到什麼目的? 例如:是要偵測每一筆交易是否涉及洗錢,還是要從大量資料中找出可能的洗錢關聯戶? 2. 數據檢查 數據是模型的基石,但不是所有數據都是有用的! 核心思考:你的數據夠嗎?時間分佈如何?正負樣本
今年的國泰金控技術年會,關於 AI 有幾個主題覺得很有趣、也受到一些啟發: 1. 可解釋 AI : AI 的可解釋性一直是一個很被關注的題目,尤其是發生在模型要準備落地應用,需要驗證黑盒子是不是依照正確的邏輯、人類的邏輯去判斷問題,我自己很喜歡這個部分,算法是用一套最基本的SHAP,SHAP基於博
最近有採購幾台 server ,正在進行一些設定的作業,把這些過程都保留下來,之後要再設定就可以回來查看了~~~ 目標 在 Centos Linux 主機上移除 Podman ,並安裝 Docker 解決 首先先確認 Centos 的版本,是 Debian or Fedora cat /
最近在調整跟優化效能時,又來複習了 Multi-threading 和 Multiprocessing 的概念,在面對大數據時,能夠有效利用多核心處理器的能力,對於提升程式執行效能至關重要。 Python 提供多線程(Multi-threading) 和多進程 (Multiprocessing)
How to utilize batch input and multi-processing techniques to accelerate feature engineering? 問題 在進行特徵工程的過程中,我們通常需要處理各種各樣的數據,並轉換它們成有意義的特徵,以供後續的模型訓練
How to access feature names in a trained XGB model ? 故事是這樣的... 在接手某個專案中,取得了一份已經訓練好的 pickle 檔案記載著 XGBoost model weight ,但因為 feature engineering 的程式碼交
1. 問題定義 每一個成功的模型都始於明確的問題定義! 核心思考:你的模型想要達到什麼目的? 例如:是要偵測每一筆交易是否涉及洗錢,還是要從大量資料中找出可能的洗錢關聯戶? 2. 數據檢查 數據是模型的基石,但不是所有數據都是有用的! 核心思考:你的數據夠嗎?時間分佈如何?正負樣本
今年的國泰金控技術年會,關於 AI 有幾個主題覺得很有趣、也受到一些啟發: 1. 可解釋 AI : AI 的可解釋性一直是一個很被關注的題目,尤其是發生在模型要準備落地應用,需要驗證黑盒子是不是依照正確的邏輯、人類的邏輯去判斷問題,我自己很喜歡這個部分,算法是用一套最基本的SHAP,SHAP基於博
最近有採購幾台 server ,正在進行一些設定的作業,把這些過程都保留下來,之後要再設定就可以回來查看了~~~ 目標 在 Centos Linux 主機上移除 Podman ,並安裝 Docker 解決 首先先確認 Centos 的版本,是 Debian or Fedora cat /
最近在調整跟優化效能時,又來複習了 Multi-threading 和 Multiprocessing 的概念,在面對大數據時,能夠有效利用多核心處理器的能力,對於提升程式執行效能至關重要。 Python 提供多線程(Multi-threading) 和多進程 (Multiprocessing)
How to utilize batch input and multi-processing techniques to accelerate feature engineering? 問題 在進行特徵工程的過程中,我們通常需要處理各種各樣的數據,並轉換它們成有意義的特徵,以供後續的模型訓練
How to access feature names in a trained XGB model ? 故事是這樣的... 在接手某個專案中,取得了一份已經訓練好的 pickle 檔案記載著 XGBoost model weight ,但因為 feature engineering 的程式碼交
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
在評估預測模型的準確率時,選用合適的評估方法至關重要。本文探討了不同的回歸和分類指標,如均方誤差(MSE)、平均絕對誤差(MAE)及準確率等。透過這些評估指標,更全面地理解模型性能,避免因不當評估而錯失優良模型。本文章還列舉了多種常見誤區和情境,以幫助讀者選擇最合適的評估方法,從而提升模型性能。 
可以使用哪些方式以機器學習結合 Google 與廣告主所擁有的消費者訊號,並同時也保護消費者的網路隱私?* 在廣告主的網站中安裝 Sitewide Tagging 代碼  採用 Google Analytics 4 挖掘更多來自第一方資料的洞察  廣告主以 SHA256 加密顧客 Emai
Thumbnail
這篇文章介紹瞭如何利用單晶片來控制不同功能模組的應用,並分享了親手體驗的影片和遇到的卡關。文章強調了需要具備基礎程式語言撰寫的邏輯,以及解決卡關時需要個人調整程式碼的順序。
Thumbnail
【寂寞與建立關係】 寂寞是學習獨處最好的時候,一個人閱讀、一個人烹飪、一個人看電影、一個人運動,在過程中可能會體會到認識自己和自己相處的喜悅。那為何獨處的狗狗還是會過的行屍走肉呢?或許就是阿德勒提到的社會興趣(social interest),一個人的心理是否健康,就要看他的社會興趣發展得如何?社
Thumbnail
在數據科學和機器學習中,特徵工程是提高模型性能的關鍵步驟之一,通過創建新特徵或轉換現有特徵,我們可以更好地捕捉數據中的信息,提高模型的預測能力。然而,當處理大數據集時,特徵工程可能變得耗時,而且若是在研發階段,特徵其實是需要快速迭代去產生並且做後續的實驗,這也是近期遇到的問題,因此想在這篇文章實作多
【香港大學維修實驗室機器設備的背後故事】 作為一名維修師傅,今天有幸被邀請去香港大學實驗室維修工作。這里每天都有學生和教授們搶著使用實驗室的機器設備,為了讓他們能夠順利進行科研工作,我的工作就是全心全意地為他們提供專業的維修服務。 你或許不知道,大學的實驗室擁有數以千計的儀器設備,包括精密的
Thumbnail
你有沒有想過一個機器可以像人類一樣學習和做出決定的世界?隨著人工智慧(AI)的出現,這不再是一個遙遠的夢想。人工智慧工具是指可以複製人類智慧並執行各種任務的智能機器。
Thumbnail
去年錄製好的線上課程,今年終於上架了! 非常慚愧,在方格子平台還沒寫幾篇內容,就要先宣傳自己的課程。不過現在67折優惠,宣傳還是有必要的吧,哈!我就維持喜寫論述的習性,介紹一下這門課程,以及我在這個領域──金融商品價格預測──所看見的狀況。 好奇的可以當補充課外知識,有興趣的可以看文末的課程連結。
Thumbnail
本文章介紹給你,在機器學習 (Machine Learning)應用中,隱私之所以重要的三大原因:法律合規,倫理考量,商業利益。
Thumbnail
高產出碩博士 閱讀 機器學習論文摘要時 需要深度回答的 4個關鍵問題 1. 這篇論文是與哪一個機器學習研究子社群對話? 2. 這篇論文試圖解決該機器學習研究社群裡的什麼矛盾? 3. 這篇論文的主要演算法產品是什麼? 4. 這篇論文的主要演算法產品如何解決研究社群裡的矛盾? 你能很好回答嗎?
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
在評估預測模型的準確率時,選用合適的評估方法至關重要。本文探討了不同的回歸和分類指標,如均方誤差(MSE)、平均絕對誤差(MAE)及準確率等。透過這些評估指標,更全面地理解模型性能,避免因不當評估而錯失優良模型。本文章還列舉了多種常見誤區和情境,以幫助讀者選擇最合適的評估方法,從而提升模型性能。 
可以使用哪些方式以機器學習結合 Google 與廣告主所擁有的消費者訊號,並同時也保護消費者的網路隱私?* 在廣告主的網站中安裝 Sitewide Tagging 代碼  採用 Google Analytics 4 挖掘更多來自第一方資料的洞察  廣告主以 SHA256 加密顧客 Emai
Thumbnail
這篇文章介紹瞭如何利用單晶片來控制不同功能模組的應用,並分享了親手體驗的影片和遇到的卡關。文章強調了需要具備基礎程式語言撰寫的邏輯,以及解決卡關時需要個人調整程式碼的順序。
Thumbnail
【寂寞與建立關係】 寂寞是學習獨處最好的時候,一個人閱讀、一個人烹飪、一個人看電影、一個人運動,在過程中可能會體會到認識自己和自己相處的喜悅。那為何獨處的狗狗還是會過的行屍走肉呢?或許就是阿德勒提到的社會興趣(social interest),一個人的心理是否健康,就要看他的社會興趣發展得如何?社
Thumbnail
在數據科學和機器學習中,特徵工程是提高模型性能的關鍵步驟之一,通過創建新特徵或轉換現有特徵,我們可以更好地捕捉數據中的信息,提高模型的預測能力。然而,當處理大數據集時,特徵工程可能變得耗時,而且若是在研發階段,特徵其實是需要快速迭代去產生並且做後續的實驗,這也是近期遇到的問題,因此想在這篇文章實作多
【香港大學維修實驗室機器設備的背後故事】 作為一名維修師傅,今天有幸被邀請去香港大學實驗室維修工作。這里每天都有學生和教授們搶著使用實驗室的機器設備,為了讓他們能夠順利進行科研工作,我的工作就是全心全意地為他們提供專業的維修服務。 你或許不知道,大學的實驗室擁有數以千計的儀器設備,包括精密的
Thumbnail
你有沒有想過一個機器可以像人類一樣學習和做出決定的世界?隨著人工智慧(AI)的出現,這不再是一個遙遠的夢想。人工智慧工具是指可以複製人類智慧並執行各種任務的智能機器。
Thumbnail
去年錄製好的線上課程,今年終於上架了! 非常慚愧,在方格子平台還沒寫幾篇內容,就要先宣傳自己的課程。不過現在67折優惠,宣傳還是有必要的吧,哈!我就維持喜寫論述的習性,介紹一下這門課程,以及我在這個領域──金融商品價格預測──所看見的狀況。 好奇的可以當補充課外知識,有興趣的可以看文末的課程連結。
Thumbnail
本文章介紹給你,在機器學習 (Machine Learning)應用中,隱私之所以重要的三大原因:法律合規,倫理考量,商業利益。
Thumbnail
高產出碩博士 閱讀 機器學習論文摘要時 需要深度回答的 4個關鍵問題 1. 這篇論文是與哪一個機器學習研究子社群對話? 2. 這篇論文試圖解決該機器學習研究社群裡的什麼矛盾? 3. 這篇論文的主要演算法產品是什麼? 4. 這篇論文的主要演算法產品如何解決研究社群裡的矛盾? 你能很好回答嗎?