nice-bill commited on
Commit
38aee6c
·
1 Parent(s): 285b093

training script added

Browse files
Files changed (3) hide show
  1. kmeans_model.pkl +0 -0
  2. train.py +80 -0
  3. wallet_dataset_labeled.csv +0 -0
kmeans_model.pkl ADDED
Binary file (6.08 kB). View file
 
train.py ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ from sklearn.preprocessing import PowerTransformer
3
+ from sklearn.cluster import KMeans
4
+ import joblib
5
+ import os
6
+ from tqdm import tqdm
7
+ import time
8
+
9
+ DATA_PATH = "wallet_dataset.csv"
10
+ PREPROCESSOR_PATH = "wallet_power_transformer.pkl"
11
+ MODEL_PATH = "kmeans_model.pkl"
12
+ OUTPUT_LABELED_DATA_PATH = "wallet_dataset_labeled.csv"
13
+ N_CLUSTERS = 4
14
+ RANDOM_STATE = 42
15
+
16
+ FEATURES = [
17
+ 'tx_count', 'active_days', 'avg_tx_per_day', 'total_gas_spent',
18
+ 'total_nft_buys', 'total_nft_sells', 'total_nft_volume_usd',
19
+ 'unique_nfts_owned', 'dex_trades', 'avg_trade_size_usd',
20
+ 'total_traded_usd', 'erc20_receive_usd', 'erc20_send_usd',
21
+ 'native_balance_delta'
22
+ ]
23
+
24
+ PERSONA_MAPPING = {
25
+ 0: "High-Frequency Bots / Automated Traders",
26
+ 1: "High-Value NFT & Crypto Traders (Degen Whales)",
27
+ 2: "Active Retail Users / Everyday Traders",
28
+ 3: "Ultra-Whales / Institutional & Exchange Wallets"
29
+ }
30
+
31
+ def train_model():
32
+ print("Starting model training process...")
33
+
34
+ steps = [
35
+ "Load Data",
36
+ "Preprocessing",
37
+ "Train KMeans",
38
+ "Apply Mapping",
39
+ "Save Data"
40
+ ]
41
+
42
+ with tqdm(total=len(steps), desc="Training Pipeline") as pbar:
43
+
44
+ pbar.set_description(f"Step: {steps[0]}")
45
+ try:
46
+ df = pd.read_csv(DATA_PATH)
47
+ except FileNotFoundError:
48
+ print(f"Error: {DATA_PATH} not found. Please ensure the raw data is available.")
49
+ return
50
+ pbar.update(1)
51
+
52
+ X = df[FEATURES]
53
+
54
+ pbar.set_description(f"Step: {steps[1]}")
55
+ preprocessor = PowerTransformer(method='yeo-johnson')
56
+ X_transformed = preprocessor.fit_transform(X)
57
+
58
+ joblib.dump(preprocessor, PREPROCESSOR_PATH)
59
+ pbar.update(1)
60
+
61
+ pbar.set_description(f"Step: {steps[2]}")
62
+ kmeans = KMeans(n_clusters=N_CLUSTERS, random_state=RANDOM_STATE, n_init='auto')
63
+ df['Cluster_labels'] = kmeans.fit_predict(X_transformed)
64
+
65
+ joblib.dump(kmeans, MODEL_PATH)
66
+ pbar.update(1)
67
+
68
+ pbar.set_description(f"Step: {steps[3]}")
69
+
70
+ df['Persona'] = df['Cluster_labels'].map(PERSONA_MAPPING)
71
+ pbar.update(1)
72
+
73
+ pbar.set_description(f"Step: {steps[4]}")
74
+ df.to_csv(OUTPUT_LABELED_DATA_PATH, index=False)
75
+ pbar.update(1)
76
+
77
+ print("\nModel training and data labeling complete.")
78
+
79
+ if __name__ == "__main__":
80
+ train_model()
wallet_dataset_labeled.csv ADDED
The diff for this file is too large to render. See raw diff