小美赛作为一个与美赛高度相似的比赛,通常作为很多队伍的美赛练手赛,本次也将尝试帮助大家对A题进行求解,希望能够对大家有所帮助。真实的选题人数评估预计明天进行公布
难度 B>D=C>A
选题 A>B>D>C
问题A(MCM)太阳黑子预测
A题,以太阳黑子为命题背景进行命题。通过题目就可以看出主要就是预测模型,对于预测模型大家需要只要一个前提,对于预测而言,没有对错只有精度高低。现在的市场上对于这个题目其实早就有了答案,比如问题一的结束时间,下图是中科院(应该是)的文章。所以,本次比赛是带着答案,去解问题。要的就是装模做样。
通过题目给出的三个网站,以及利用newbing chatgpt进行检索找到了一些可以解题的数据,下面是网盘的数据分享链接,大家可以参考使用。
数据分享链接:https://pan.baidu.com/s/18qt3aV4PzDUF65eP2b_1DQ
提取码:sxjm
下面带来每个题目的解题思路:
首先收集了数据,数据预处理是第一步,我们不可能直接拿着数据去做,网站可明确说明是存在一定缺失值的。所以,对于缺失值甚至于可能存在的异常值需要进行相应的处理。采用线性插值(拉格朗日、牛顿差值等)进行补充,采用3Σ原则、箱型图进行判定异常值。都是需要处理的。切记,数据预处理至少有十分的分值设定,一定要做相应的处理。
问题一、请预测当前和下一个太阳周期的开始和结束。
该问题是有明确答案的,大家可以参考我给出的第一张图中所说的。那么如何装模做样的得出这样的结果的,在给出的名字为 问题一周期时长以及 太阳周期最小值最大值 文件中,大家可以使用周期长度,进行单指标预测即可。
至于预测模型的选择,还是那个前提,预测模型没有对错只有精度高低。下面是简单给大家罗列了常见的预测模型,对于下面这些预测模型选择什么都是对的,大家可以根据自己的掌握程度以及喜爱程度进行选择即可。
问题二、请预测下一个太阳周期的太阳最大值的开始时间和持续时间;
可以与问题一一样,采用最大值或者最小值的数据进行单指标预测,也可以使用全指标中引入各种各种各样的指标,进行多指标预测。这里就我个人而言,更喜欢前者。
Year | Month | Day | Time | Sunspot_Group | Additional_Code1 | Group_Type | Observed_Umbral_Area |
Whole_Spot_Area | Corrected_Umbral_Area | Corrected_Whole_Spot_Area | Space1 | Distance_From_Center | Space2 | Position_Angle | Space3 |
Carrington_Longitude | Space4 | Latitude | Space5 | Central_Meridian_Distance |
问题三、预测当前和下一个太阳周期中太阳黑子的数量和面积,并在你的论文中解释你的模型的可靠性。
需要预测数量和面积,这里两种思路。对于太阳黑子的数量,整理的数据集中已经给出了,大家直接可以选择预测模型进行预测。主要是对于面积的预测
对于面积来来讲,目前我有两种想法:
1、 直接使用与问题三太阳黑子数量预测相同的模型进行预测
2、 拟合出(黑子数量与面积)关系式 直接利用关系式以及数量数据的结果进行面积的评估预测。
目前,我将采用使用牛顿插值处理数据集+问题一使用arima进行单指标预测+问题二使用灰色预测进行单指标预测+问题三构架arima、灰色、LSTM预测模型的加权平均预测预测太阳黑子数量+构建非线性拟合关系式(黑子数量与面积)利用黑子数量预测的结果直接得到面积的预测值
使用数据集就是我分享的数据集
数据分享链接:https://pan.baidu.com/s/18qt3aV4PzDUF65eP2b_1DQ
提取码:sxjm
下面是部分处理数据的代码,大家可以参考使用
import pandas as pd
# 文件路径
file_path = '/mnt/data/g1874.txt'
# 定义列名称和宽度
col_names_pre_1977 = [
'Year', 'Month', 'Day', 'Time', 'Greenwich_sunspot_group',
'Group_type_1874_1981', 'Observed_umbral_area_1874_1981', 'Whole_spot_area',
'Corrected_umbral_area', 'Corrected_whole_spot_area', 'Distance_from_center',
'Position_angle', 'Carrington_Longitude', 'Latitude', 'Central_meridian_distance'
]
col_names_post_1977_pre_1982 = [
'Year', 'Month', 'Day', 'Time', 'NOAA_USAF_group',
'Group_type_1874_1981', 'Observed_umbral_area_1874_1981', 'Whole_spot_area',
'Corrected_umbral_area', 'Corrected_whole_spot_area', 'Distance_from_center',
'Position_angle', 'Carrington_Longitude', 'Latitude', 'Central_meridian_distance'
]
col_names_post_1982 = [
'Year', 'Month', 'Day', 'Time', 'NOAA_USAF_group',
'Suffix_to_group_number', 'Magnetic_group_type', 'Zurich_McIntosh_group_type',
'Number_of_spots_in_group', 'Whole_spot_area', 'Distance_from_center',
'Position_angle', 'Carrington_Longitude', 'Latitude', 'Central_meridian_distance'
]
# 定义列宽
col_widths_pre_1977 = [4, 2, 3, 4, 8, 2, 2, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5]
col_widths_post_1977_pre_1982 = col_widths_pre_1977 # 同样的列宽
col_widths_post_1982 = [4, 2, 3, 4, 8, 1, 3, 4, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5]
# 读取不同格式的数据
df_pre_1977 = pd.read_fwf(file_path, widths=col_widths_pre_1977, names=col_names_pre_1977, dtype=str)
df_post_1977_pre_1982 = pd.read_fwf(file_path, widths=col_widths_post_1977_pre_1982, names=col_names_post_1977_pre_1982, dtype=str)
df_post_1982 = pd.read_fwf(file_path, widths=col_widths_post_1982, names=col_names_post_1982, dtype=str)
# 根据年份合并数据
df_pre_1977 = df_pre_1977[df_pre_1977['Year'] < '1977']
df_post_1977_pre_1982 = df_post_1977_pre_1982[(df_post_1977_pre_1982['Year'] >= '1977') & (df_post_1977_pre_1982['Year'] < '1982')]
df_post_1982 = df_post_1982[df_post_1982['Year'] >= '1982']
# 合并数据框
df_combined = pd.concat([df_pre_1977, df_post_1977_pre_1982, df_post_1982])
# 保存为 Excel 文件
excel_path = '/mnt/data/sunspot_data.xlsx'
df_combined.to_excel(excel_path, index=False)