You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于SimFin获取事件后5天收盘价作为逻辑回归目标变量的实现问询

基于SimFin获取事件后5天收盘价作为逻辑回归目标变量的实现问询

看起来你已经完成了大部分数据准备工作,就差最后一步把事件发布后5天的收盘价赋值给目标变量了。我来帮你补全代码,同时解释下关键逻辑,避免踩坑:

首先,先补充你代码里遗漏的细节(比如导入pandas),然后一步步实现目标变量的设置:

import pandas as pd
import simfin as sf

# Load historical data
sf.set_data_dir('simfin_data')
sf.set_api_key(api_key='')  # 记得填入你的SimFin API密钥

prices = sf.load(dataset='shareprices', variant='daily', market='us')
df = prices.loc[prices['Ticker'] == 'TSLA']

# 确保索引是datetime类型且按日期升序排列(关键,否则shift会出错)
df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index('Date').sort_index()
df = df[['High', 'Low', 'Open', 'Close', 'Volume']]

# Set Target Variable
load_target = sf.load(dataset='income', variant='quarterly', market='us')
load_target = load_target.loc[load_target['Ticker'] == 'TSLA']

# 将发布日期转为datetime类型,避免日期格式不匹配
load_target['Publish Date'] = pd.to_datetime(load_target['Publish Date'])

# 第一步:先计算每个交易日之后第5个交易日的收盘价
# 用shift(-5)是因为我们要取当前日期往后数5个交易日的收盘价(SimFin数据是交易日数据,自动跳过非交易日)
df['close_5d_later'] = df['Close'].shift(-5)

# 第二步:创建目标变量列,初始为NaN,仅在事件发布日期填充对应5天后的收盘价
df['target'] = pd.NA
for publish_date in load_target['Publish Date']:
    # 检查发布日期是否在行情数据的索引中(避免日期不在交易时间的情况)
    if publish_date in df.index:
        df.loc[publish_date, 'target'] = df.loc[publish_date, 'close_5d_later']

# 如果你不需要中间列,可以删掉它
df = df.drop(columns=['close_5d_later'])

关键细节说明:

  • 日期排序:一定要确保行情数据是按日期升序排列的,shift(-5)的逻辑才会正确——它会取当前行之后第5行的收盘价,对应实际的5个交易日之后的价格。
  • 日期格式匹配:把Publish Date转为datetime类型,避免字符串和datetime索引匹配失败的问题。
  • 边界检查:加入了发布日期是否在行情数据中的判断,防止因为发布日期是非交易日(比如周末、节假日)导致的索引错误。
  • 目标变量逻辑:这里的实现是仅在事件发布当天的行中填充目标值(即该日期5天后的收盘价),其他行保持为缺失值,适合以事件日为样本点的逻辑回归模型;如果你的需求是给每个行都标记最近一次事件后5天的收盘价,可以调整逻辑(比如用向前填充等方式)。

备注:内容来源于stack exchange,提问作者x945

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 11:14:35