生生不息

生生不息

AI对时间序列进行ADF检验

2025-06-27
AI对时间序列进行ADF检验

提示词

有一个以日期为index的DataFrame,包含某金融产品的成交价,现在需要对其进行ADF检验,请给出示例代码。

答案

import pandas as pd
from statsmodels.tsa.stattools import adfuller

# 假设原始DataFrame为df,日期为index,包含"成交价"列
# 示例数据准备(可替换为实际数据)
# dates = pd.date_range(start='2023-01-01', end='2025-06-27', freq='D')
# prices = [100 + i*0.5 + 5*np.random.randn() for i in range(len(dates))]
# df = pd.DataFrame({'成交价': prices}, index=dates)


# 执行ADF检验
def adf_test(series):
    result = adfuller(series.dropna())  # 自动处理缺失值[5](@ref)
    adf_stat = result[0]
    p_value = result[1]
    critical_values = result[4]
  
    # 格式化输出结果
    output = pd.Series({
        'ADF Statistic': f"{adf_stat:.4f}",
        'p-value': f"{p_value:.4f}",
        '1%临界值': critical_values['1%'],
        '5%临界值': critical_values['5%'],
        '10%临界值': critical_values['10%']
    })
  
    # 判断结论
    if p_value < 0.05:
        output['结论'] = "拒绝原假设,序列平稳"
    else:
        output['结论'] = "无法拒绝原假设,序列非平稳"
  
    return output

# 调用检验函数
adf_result = adf_test(df['成交价'])
print(adf_result)

我使用了自己的数据,代码都是ai写的,只是注释了模拟数据行。

结果:

ADF Statistic          -1.7580
p-value                 0.4015
1%临界值                -3.433854
5%临界值                -2.863088
10%临界值               -2.567594
结论               无法拒绝原假设,序列非平稳
dtype: object