
1) 【一句话结论】
采用LSTM(或Transformer)作为核心时序模型,输入多维度特征(技术指标、基本面数据、市场情绪数据),通过单位根检验(ADF)确认并处理非平稳性(一阶差分),结合数据归一化(如Min-Max或Z-score)处理量纲差异,用线性插值/模型预测处理缺失值,构建模型捕捉价格走势的动态依赖关系。
2) 【原理/概念讲解】
3) 【对比与适用场景】
| 特性 | LSTM(循环神经网络) | Transformer(自注意力机制) |
|---|---|---|
| 定义 | 带门控的RNN,处理序列局部依赖 | 基于自注意力的序列模型,无循环结构 |
| 核心机制 | 细胞状态+门控(输入、遗忘、输出门) | 自注意力(计算位置间权重)+前馈网络 |
| 依赖捕捉 | 局部(前序) | 全局(所有位置) |
| 计算效率 | 串行(依赖前序) | 并行(所有位置同时计算) |
| 适用场景 | 数据量小(<100万样本)或局部依赖强时用LSTM | 数据量大(>100万样本),需全局依赖时用Transformer |
| 注意点 | 容易梯度消失/爆炸,参数较多 | 需要大量数据,对数据归一化敏感 |
4) 【示例】(伪代码)
# 数据预处理(含归一化)
def preprocess_data(df):
# 单位根检验(ADF)确认非平稳性
from statsmodels.tsa.stattools import adfuller
result = adfuller(df['close'])
if result[1] > 0.05: # p值>0.05,非平稳
df['close'] = df['close'].diff().dropna() # 一阶差分
# 数据归一化(Min-Max缩放)
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df[['close', 'MA5', 'RSI', 'PE', 'sentiment']] = scaler.fit_transform(df[['close', 'MA5', 'RSI', 'PE', 'sentiment']])
# 处理缺失值:线性插值
df = df.interpolate(method='linear')
# 特征工程:技术指标
df['MA5'] = df['close'].rolling(5).mean()
df['RSI'] = calculate_rsi(df['close'], 14)
# 基本面数据
df['PE'] = df['pe_ratio']
df['PB'] = df['pb_ratio']
# 市场情绪数据:新闻情感分析(假设函数)
news_df = get_news_data() # 调用新闻API获取文本
sentiment = news_df['text'].apply(lambda x: analyze_sentiment(x, model='vader', thresholds={'pos':0.1, 'neg':-0.1}))
df['sentiment'] = sentiment
return df
# 模型构建(LSTM示例,预测连续值)
def build_model(input_shape):
model = tf.keras.Sequential()
model.add(tf.keras.layers.LSTM(units=64, return_sequences=True, input_shape=input_shape))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.LSTM(units=32))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Dense(1, activation='relu')) # 预测连续值
model.compile(optimizer='adam', loss='mean_squared_error')
return model
# 训练
model = build_model(input_shape=(seq_length, num_features))
model.fit(X_train, y_train, epochs=20, batch_size=32, validation_data=(X_val, y_val))
# 预测
y_pred = model.predict(X_test)
5) 【面试口播版答案】
“面试官您好,针对股票价格走势预测,我建议采用LSTM(或Transformer)作为核心模型。首先,模型输入特征会结合多维度数据:技术指标比如移动平均线(MA5)、相对强弱指数(RSI),基本面数据如市盈率(PE)、市净率(PB),还有市场情绪数据比如新闻文本的情感分析得分(通过NewsAPI获取文本,用VADER计算正负情感)。接下来处理非平稳性,因为金融数据通常存在均值或方差随时间变化的情况,我会用单位根检验(ADF检验)确认数据是否非平稳,若存在单位根则用一阶差分(当前值减前一期值)使其平稳。对于缺失值,会采用线性插值法,用相邻的有效数据填充,如果缺失较多则用KNN插值。模型方面,LSTM通过门控机制控制细胞状态,能有效处理长序列依赖(比如历史价格趋势);如果数据量足够大,也可以用Transformer,利用自注意力机制捕捉全局依赖,并行计算效率更高。预测连续价格时,输出层用线性激活函数(如ReLU),而非分类的sigmoid。总结来说,这个模型能结合多维度特征,处理数据中的非平稳性和缺失值,通过数据归一化(如Min-Max缩放)确保训练稳定,从而更准确地预测股票价格走势。”
6) 【追问清单】
7) 【常见坑/雷区】