📈 特征工程基础

机器学习选股 · 实战指南
🔍 什么是特征 Feature · 让数据说话

🧠 定义

特征是原始数据中提取的可量化指标,用于描述股票的状态、趋势或模式。在选股中,特征是模型预测的“燃料”。

  • 数值型 价格、成交量、波动率
  • 衍生型 均线、动量、乖离率
  • 类别型 行业、板块、事件标签

🎯 特征工程目标

  1. 提升信号 —— 剔除噪音,增强预测力
  2. 降维 —— 减少冗余,防止过拟合
  3. 可解释性 —— 让模型逻辑更透明

✨ 好的特征 = 模型成功的一半

📊 经典技术指标特征 MA · RSI · MACD
指标全称核心含义典型参数
MA移动平均线平滑价格趋势,支撑/阻力5日, 20日, 60日
RSI相对强弱指标超买/超卖,动量反转14日 (经典)
MACD异同移动平均线趋势强度、金叉/死叉12, 26, 9

📉 MA 移动平均

公式: MAn = (P1 + P2 + ... + Pn) / n

  • SMA (简单移动平均) — 等权
  • EMA (指数移动平均) — 近期权重更大
  • WMA (加权移动平均) — 自定义权重

选股用法 价格上穿MA = 买入信号

⚡ RSI 相对强弱

公式: RSI = 100 - 100/(1 + RS)
RS = 平均上涨幅度 / 平均下跌幅度

  • RSI > 70 超买 (可能回调)
  • RSI < 30 超卖 (可能反弹)
  • 背离信号 (价格新高但RSI走低)

📈 MACD 异同移动平均

组成: DIF = EMA12 - EMA26
DEA = EMA9(DIF) · 柱状线 = 2×(DIF - DEA)

  • DIF上穿DEA → 金叉 (买入)
  • DIF下穿DEA → 死叉 (卖出)
  • 零轴上方: 多头市场
💻 Python 实现 Pandas 一步计算
# 导入库
import pandas as pd
import numpy as np

# 假设 df 包含 'close' 列
def add_technical_features(df):
    # ---- MA (简单移动平均) ----
    df['MA_5'] = df['close'].rolling(window=5).mean()
    df['MA_20'] = df['close'].rolling(window=20).mean()
    df['MA_60'] = df['close'].rolling(window=60).mean()

    # ---- RSI (14日) ----
    delta = df['close'].diff()
    gain = delta.where(delta > 0, 0.0)
    loss = (-delta.where(delta < 0, 0.0))
    avg_gain = gain.rolling(window=14).mean()
    avg_loss = loss.rolling(window=14).mean()
    rs = avg_gain / avg_loss
    df['RSI_14'] = 100 - (100 / (1 + rs))

    # ---- MACD (12,26,9) ----
    ema12 = df['close'].ewm(span=12, adjust=False).mean()
    ema26 = df['close'].ewm(span=26, adjust=False).mean()
    df['MACD_DIF'] = ema12 - ema26
    df['MACD_DEA'] = df['MACD_DIF'].ewm(span=9, adjust=False).mean()
    df['MACD_HIST'] = 2 * (df['MACD_DIF'] - df['MACD_DEA'])

    return df

# 使用示例
# df = pd.read_csv('stock.csv')
# df = add_technical_features(df)
# print(df[['close','MA_20','RSI_14','MACD_DIF']].tail())
🧩 特征工程流程 & 指标可视化
📊 特征工程流程 · 从原始数据到选股特征 📄 原始行情 开高低收 · 成交量 ⚙️ 特征计算 MA · RSI · MACD (滚动窗口/EWM) 🧮 特征矩阵 标准化/降维 🤖 模型 选股信号 常见指标可视化示意 MA RSI MACD柱
🧪 特征使用小贴士

✅ 标准化

不同指标量纲差异大 (MA ~ 价格, RSI 0~100),建议使用 StandardScaler 或 MinMaxScaler 归一化。

⚠️ 多重共线性

MA(5) 与 MA(20) 高度相关,可考虑只保留部分或使用PCA降维。

⏳ 滞后性

移动平均类指标天生滞后,可结合差分、动量特征 (如ROC) 补充。