特征生成·思路

 
针对数字特征,可以采用如下方法:·
    

特征生成伪算法

 
```
基于交易数据的特征工程,通过统计学方法和金融指标计算生成组合特征

输入数据格式:
- 时间序列交易数据 (OHLCV: Open, High, Low, Close, Volume)
- 交易时间戳、交易量、成交额等基础字段
- 其他辅助数据(如市场深度、订单簿数据等)

特征生成步骤伪算法:

1. 数据预处理阶段
   - 时间序列对齐和重采样 (统一时间间隔)
   - 异常值检测和处理 (Winsorization, Z-score)
   - 缺失值填充 (前向填充、线性插值等)
   - 数据类型转换和标准化

2. 基础价格特征
   - 价格变化率: (Close_t - Close_t-1) / Close_t-1
   - 对数收益率: log(Close_t / Close_t-1)
   - 价格振幅: (High_t - Low_t) / Close_t-1
   - 开盘跳空: (Open_t - Close_t-1) / Close_t-1
   - 收盘价相对位置: (Close_t - Low_t) / (High_t - Low_t)

3. 移动窗口统计特征
   - 滑动平均: MA_n = mean(Close_t, Close_t-1, ..., Close_t-n+1)
   - 指数移动平均: EMA_n = α * Close_t + (1-α) * EMA_t-1
   - 移动标准差: STD_n = std(Close_t, ..., Close_t-n+1)
   - 移动最大值/最小值: MAX_n, MIN_n
   - 移动分位数: Q25_n, Q50_n, Q75_n

4. 动量指标特征
   - RSI (相对强弱指数):
       RSI_n = 100 - (100 / (1 + RS))
       RS = Average_Gain_n / Average_Loss_n
   - MACD (异同移动平均线):
       MACD = EMA_12 - EMA_26
       Signal = EMA_9(MACD)
       Histogram = MACD - Signal
   - 动量指标: MOM_n = Close_t - Close_t-n
   - 变化率指标: ROC_n = (Close_t - Close_t-n) / Close_t-n

5. 波动率特征
   - 历史波动率: HV_n = STD(Returns_n) * sqrt(252)
   - 平均真实波幅: ATR_n = mean(TR_n)
       TR = max(High-Low, |High-Close_t-1|, |Low-Close_t-1|)
   - Parkinson波动率: sqrt(ln(High/Low)² / (4*ln(2)))
   - Garman-Klass波动率:
       GK = 0.5*ln(H/L)² - (2*ln(2)-1)*ln(C/O)²

6. 成交量特征
   - 成交量变化率: (Volume_t - Volume_t-1) / Volume_t-1
   - 成交量移动平均: VMA_n = mean(Volume_t, ..., Volume_t-n+1)
   - 价量相关性: corr(Price_changes, Volume_changes)
   - 成交量加权平均价格: VWAP = Σ(Price * Volume) / Σ(Volume)
   - 能量潮指标: OBV = OBV_t-1 + sign(Close_t - Close_t-1) * Volume_t

7. 技术形态特征
   - 支撑阻力位: 基于历史高低点识别
   - 趋势强度: ADX指标
   - 布林带位置: (Close - Lower_Band) / (Upper_Band - Lower_Band)
   - 威廉姆斯%R: (Highest_High_n - Close) / (Highest_High_n - Lowest_Low_n)

8. 时间特征
   - 小时/分钟/秒特征
   - 周几/月份特征
   - 节假日标识
   - 交易时段标识
   - 周期性特征(傅里叶变换)

9. 滞后特征
   - 多期滞后: Close_t-1, Close_t-2, ..., Close_t-n
   - 滞后收益率: Return_t-1, Return_t-2, ...
   - 交互项: Price_t * Volume_t, High_t - Low_t, etc.

10. 高阶特征
    - 价格导数: 二阶导数(加速度)
    - 滚动相关系数: Price与Volume的相关性
    - 滚动Beta: 资产收益与市场收益相关性
    - Z-Score标准化: (X - μ) / σ
    - Min-Max标准化: (X - min) / (max - min)

11. 风险指标特征
    - 最大回撤: max(Peak - Trough) / Peak
    - 夏普比率: (Return - Risk_free_rate) / Volatility
    - 卡尔马比率: Return / Max_Drawdown
    - VaR (风险价值): 分位数方法计算
    - 偏度和峰度: 收益率分布的高阶矩

12. 特征选择和降维
    - 相关性过滤: 去除高相关性特征
    - 方差阈值过滤: 去除低方差特征
    - 互信息分析: 特征与目标变量相关性
    - PCA主成分分析: 降维去噪
    - 递归特征消除: RFE选择重要特征

输出特征矩阵:
- N个样本 × M个特征
- 包含时间戳、特征名称、特征值
- 可用于机器学习模型训练

注意事项:
1. 避免未来信息泄露 (Look-ahead bias)
2. 保持时间序列因果关系
3. 特征缩放和标准化
4. 处理不同时间尺度的特征
5. 特征稳定性和鲁棒性验证

```
    

 

    

 
按类别特征进行分组
    

 

    

 

    

 
- 基于秒级流水合成天特征 
  - Amount_sum = df_tra.groupby('time8')['Amount'].sum()
  - Amount_mean = df_tra.groupby('time8')['Amount'].mean()

- 基于天再合成最近3天,7天特征 
  - 基于天的特征只做Amount_sum,Amount_mean两列,然后以此列按3天的维度进行聚合
  - 基于天的特征只做Amount_sum,Amount_mean两列,然后以此列按7天的维度进行聚合

基于秒级流水合成天特征

 
```
# 调用按天聚合方法
print("开始调用data_agg_byday方法进行按天聚合...")
df_final_result = dtf.data_agg_byday(
    df=df_tra,
    col_time='time8',
    interval=1,
    win_len=1,
    identifys=[['From','time8'],['To','time8']],
    num_type=['Amount'],
    classify_type=['Payment Format', 'Currency'],
    merge_del_cols=['From','To'],
    new_col_name='key'
)
```

 


 

  

 


指标分类

 
- count: 计数
- sum: 求和
- mean: 均值
- std: 标准差
- min: 最小值
- max: 最大值
- median: 中位数
- q25: 25%分位数
- q75: 75%分位数
- skew: 偏度
- kurtosis: 峰度
- cv: 变异系数
- iqr: 四分位距
- range: 极差
- se: 标准误差

    

 

    

 

    

 
- 当天的交易额,与历史交易的对比,不包括当天
  - 实际上就是波动率

    

 

    

 

    

 


 

  

 


指标

 
```
主要改进:
1. 引入列名配置结构体
pub struct ColumnConfig {
    pub time_col: String,      // 时间列
    pub price_col: String,     // 价格列  
    pub balance_col: String,   // 余额列
    pub amount_col: String,    // 金额列
}
2. 参数化设计
默认配置:保持与原始数据的兼容性
impl Default for ColumnConfig {
    fn default() -> Self {
        Self {
            time_col: "DT_TIME".to_string(),
            price_col: "AMT".to_string(),
            balance_col: "ACCBAL".to_string(),
            amount_col: "CNY_AMT".to_string(),
        }
    }
}
自定义配置:支持任意列名的数据源
let custom_config = ColumnConfig {
    time_col: "交易时间".to_string(),
    price_col: "单价".to_string(),
    balance_col: "账户余额".to_string(),
    amount_col: "交易金额".to_string(),
};
3. 方法重构
所有硬编码的列名都通过 &column_config.price_col 等方式访问
保持了原有功能的完整性,同时提高了灵活性
🎯 测试结果验证:
默认列名配置测试 ✅
列名:DT_TIME, AMT, ACCBAL, CNY_AMT
特征计算:8个特征列正常生成
验证结果:所有计算逻辑正确
自定义列名配置测试 ✅
列名:交易时间, 单价, 账户余额, 交易金额
特征计算:同样生成8个特征列
CSV输出:使用中文列名,正确保存

📊 关键特性保持完整:
成交量推导:交易金额 / 单价 = 100.00 ✓
价格变化率:范围 -0.039216 到 0.030303 ✓
移动平均:5日移动平均正确计算 ✓
VWAP计算:成交量加权平均价正确 ✓
所有特征:价格、成交量、时间等特征均正常计算 ✓

🔒 代码质量提升:
消除硬编码:所有列名都通过配置管理
类型安全:使用 Rust 类型系统确保正确性
向后兼容:默认配置保持原有功能
高度灵活:支持任意列名的数据源
易于维护:配置集中管理,便于修改

📈 扩展性:
现在代码可以轻松适应不同的数据源格式:
银行系统:交易时间、金额、余额
股票数据:date、close、volume
加密货币:timestamp、price、amount
重构成功!代码现在更加灵活、健壮,可以适应各种不同列名的金融数据源。 🎉

```
    

 
- 可以暂时将amt的sum暂时作为交易金额,以映射到金融交易流水的场景
    

 
- 带成交量的方法中,可以将count作为成交量列,并使用真实成交量列进行计算
- 引时取AMT为amt_mean就可以 
```
let result = features.calculate_all_features(
            df,
            "AMT",
            "DT_TIME",
            Some("ACCBAL"),
            Some("VOLUME"),  // 使用真实的成交量列
            Some("CNY_AMT"),
        );

```
    

 
- 未来可以将一天分为6个段,计算每个段的特征
    

 

    

 

    

 


 

  

 


rust cpython

 
- 数据处理位于  /ai/wks/rfil/mij/data目录 
- 测试于       /ai/wks/rfil/study
- 接口封装于   /ai/wks/rfil/rust2py
    

项目编译与安装

 
```
cd /ai/wks/rfil/rust2py
cd target/debug/
rm -rf /ai/wks/aitpf/src/tpf/rst/rust2py.so
cp librust2py.so /ai/wks/aitpf/src/tpf/rst/rust2py.so
ll /ai/wks/aitpf/src/tpf/rst/rust2py.so

cp librust2py.so /wks/python/ubuntu_py311_gpu/lib/python3.11/site-packages/rust2py.so

```
    
```
rm -rf /wks/python/ubuntu_py311_gpu/lib/python3.11/site-packages/tpf 
rsync -rltDv /ai/wks/aitpf/src/tpf /wks/python/ubuntu_py311_gpu/lib/python3.11/site-packages/


```

 

    

 
```

```
    

 
```

```

    

 

    

 


 

  

 


PLSQL版特征·基础版

 

    

 

    

 

    

 

    

 


 

  

 


参考