leonsimon23 commited on
Commit
41a3aaf
·
verified ·
1 Parent(s): 6cc0541

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +15 -8
app.py CHANGED
@@ -127,22 +127,27 @@ def run_full_analysis(progress=gr.Progress(track_tqdm=True)):
127
  log_lines.append(f"⚠️ 序列可能是白噪声(p-value = {lb_p_value:.4f}),模型可能无效。")
128
  else:
129
  log_lines.append(f"✅ 通过白噪声检验 (p-value = {lb_p_value:.4f}),可以进行后续建模。")
130
- yield update_ui()
131
-
132
  # --- 5. 季节性检验与分解 ---
133
- log_lines.append("### 4. 季节性检验与STL分解")
134
- # (简化了您的季节性检验逻辑,直接检查周期性并设定参数)
135
  period = 365
136
- seasonal_enabled = len(ts_data) > 2 * 7 # 简化判断,若数据多于两周则开启周季节性
137
  m_period = 7 if seasonal_enabled else 1
138
  log_lines.append(f"✅ 季节性参数设定: m={m_period}, seasonal={seasonal_enabled}")
139
 
140
  if len(ts_data) >= 2 * period:
141
- stl = STL(ts_data, period=period, seasonal=period+1)
 
 
 
 
 
142
  res = stl.fit()
143
  fig, axes = plt.subplots(4, 1, figsize=(12, 8), sharex=True)
144
- res.plot(axes=axes)
145
- fig.suptitle('STL 分解图 (周期=365)', fontsize=16)
 
146
  plt.tight_layout(rect=[0, 0, 1, 0.96])
147
  figures.append(fig)
148
  log_lines.append("✅ STL分解图已生成。")
@@ -150,6 +155,8 @@ def run_full_analysis(progress=gr.Progress(track_tqdm=True)):
150
  log_lines.append("⚠️ 数据长度不足以进行年度季节性分解。")
151
  yield update_ui()
152
 
 
 
153
  # --- 6. 混合策略回测优化窗口大小 ---
154
  log_lines.append("\n### 5. 优化训练窗口大小")
155
  log_lines.append("⏳ **此步骤计算量大,可能需要5-15分钟,请耐心等待...**")
 
127
  log_lines.append(f"⚠️ 序列可能是白噪声(p-value = {lb_p_value:.4f}),模型可能无效。")
128
  else:
129
  log_lines.append(f"✅ 通过白噪声检验 (p-value = {lb_p_value:.4f}),可以进行后续建模。")
130
+ yield update_ui()
131
+
132
  # --- 5. 季节性检验与分解 ---
133
+ log_lines.append("\n### 4. 季节性检验与STL分解")
 
134
  period = 365
135
+ seasonal_enabled = len(ts_data) > 2 * 14 # 改为数据多于两周则开启季节性
136
  m_period = 7 if seasonal_enabled else 1
137
  log_lines.append(f"✅ 季节性参数设定: m={m_period}, seasonal={seasonal_enabled}")
138
 
139
  if len(ts_data) >= 2 * period:
140
+ # 【关键修复】确保 seasonal 参数是奇数
141
+ seasonal_period_for_stl = period if period % 2 != 0 else period + 1
142
+ log_lines.append(f"✅ 准备进行STL分解,周期(period)={period},季节平滑窗口(seasonal)={seasonal_period_for_stl}。")
143
+ yield update_ui() # 更新一下日志,让用户知道我们在做什么
144
+
145
+ stl = STL(ts_data, period=period, seasonal=seasonal_period_for_stl)
146
  res = stl.fit()
147
  fig, axes = plt.subplots(4, 1, figsize=(12, 8), sharex=True)
148
+ # 使用 res.plot() 可以自动处理标签
149
+ res.plot(axes=axes)
150
+ fig.suptitle(f'STL 分解图 (周期={period})', fontsize=16)
151
  plt.tight_layout(rect=[0, 0, 1, 0.96])
152
  figures.append(fig)
153
  log_lines.append("✅ STL分解图已生成。")
 
155
  log_lines.append("⚠️ 数据长度不足以进行年度季节性分解。")
156
  yield update_ui()
157
 
158
+
159
+
160
  # --- 6. 混合策略回测优化窗口大小 ---
161
  log_lines.append("\n### 5. 优化训练窗口大小")
162
  log_lines.append("⏳ **此步骤计算量大,可能需要5-15分钟,请耐心等待...**")