# feature_engineering.py import numpy as np def calculate_wallet_concentration(holder_data): """ holder_data: list of (wallet, %_owned) Returns: concentration score (0 to 1) """ top10 = sorted(holder_data, key=lambda x: x[1], reverse=True)[:10] total_top10 = sum(x[1] for x in top10) return total_top10 / 100 # As a ratio def calculate_volume_acceleration(volume_timeseries): """ volume_timeseries: list of (timestamp, volume) Returns: acceleration value """ volumes = [v for _, v in sorted(volume_timeseries)] if len(volumes) < 3: return 0 v1, v2, v3 = volumes[-3:] accel = ((v3 - v2) - (v2 - v1)) / max(v1, 1) return accel def simulate_slippage(liquidity, order_size): """ liquidity: USD in pool order_size: USD value to simulate buy Returns: simulated slippage percentage """ if liquidity == 0: return 1.0 # 100% slippage slippage = min(order_size / liquidity, 1.0) return slippage