
1) 【一句话结论】
处理停牌数据可通过插值或剔除,异常波动可通过过滤或模型调整,需评估对策略有效性的影响,如停牌可能引入偏差或信息损失,异常波动可能放大风险或策略表现。
2) 【原理/概念讲解】
老师口吻解释:股票日度数据中,停牌属于“数据缺失”场景,因公司重大事件(如并购、财报发布)导致交易暂停,此时缺失的交易日数据需处理,否则影响时间序列分析;异常价格波动属于“异常值”场景,由突发利空(如负面财报、政策变化)引发,价格剧烈下跌,可能偏离正常分布。处理逻辑:停牌需补充缺失值(如前向/后向插值)或剔除样本;异常波动需过滤(如IQR、Z-score)或调整模型(如加入事件特征)。类比:停牌像“断链”,需用前后数据“接链”;异常波动像“异常点”,需用“过滤网”筛除或“模型修正”适应。
3) 【对比与适用场景】
| 处理场景 | 定义 | 处理方法 | 适用场景 | 注意点 |
|---|---|---|---|---|
| 停牌数据缺失 | 股票因重大事件暂停交易 | 前向插值(用前一日价格)、后向插值(用后一日价格)、剔除样本 | 停牌时间短(1-3天),不影响趋势;停牌时间长(>5天)需谨慎 | 插值可能引入偏差,剔除可能损失信息 |
| 异常价格波动 | 突发事件导致价格剧烈变动 | IQR过滤(剔除Q1-1.5IQR或Q3+1.5IQR外的点)、Z-score过滤(绝对值>3)、模型调整(加入事件哑变量) | 突发利空/利好,波动幅度大(如跌幅>10%) | 过滤标准需验证,模型调整需额外特征 |
4) 【示例】
假设股票A在2023-10-20停牌3天(10-21至10-23无数据),处理方法:前向插值,用10-20日价格(假设为100元)作为10-21日数据。若10-24日价格跳跌至80元(异常波动),用IQR过滤:计算10-17至10-24日价格的中位数和IQR,剔除80元(若超出范围),或加入事件特征(如“10-20日停牌”哑变量)调整模型。
伪代码(Python伪代码):
# 停牌处理(前向插值)
def interpolate_stopped(data, date):
prev_price = data[data['date'] < date]['price'].iloc[-1]
return prev_price
# 异常波动处理(IQR过滤)
def filter_outliers(data):
q1 = data['price'].quantile(0.25)
q3 = data['price'].quantile(0.75)
iqr = q3 - q1
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
return data[(data['price'] >= lower_bound) & (data['price'] <= upper_bound)]
5) 【面试口播版答案】
(约90秒)
“面试官您好,针对股票日度数据中的停牌和异常波动,我会分场景处理。首先,停牌属于数据缺失,比如某股票因重大事件停牌3天,我会用前一日价格插值,比如停牌前一日价格100元,停牌后直接用100元作为缺失日的数据,这样保持时间序列连续性。对于异常波动,比如突发利空导致股价暴跌,我会用IQR过滤,计算价格的中位数和IQR,剔除超出1.5倍IQR范围的数据点,比如跌幅超过15%的交易日。处理后的数据会影响策略有效性,比如停牌插值可能引入偏差,若停牌时间长,策略回测会低估波动;异常波动过滤能减少噪声,但可能损失部分真实信息,需在回测中验证,比如比较处理前后的夏普比率,看是否提升或降低策略表现。”
6) 【追问清单】
7) 【常见坑/雷区】