2023美赛C题:预测Wordle结果-思路详解及参考代码

2023-11-08

一、题目解析

总体来看与去年的C题比较相似,唯一一道有数据(不需要自己额外找)的题目,选题人估计也最多。

本质是数据分析题目,需要建立预测模型、分类模型、特征挖掘等。相对来说出思路比较简单,想出彩比较难。所以在分析建模时一定要多维度思考,不然连页数都凑不够。

题目要求:

《纽约时报》已经要求你对此文件中的结果进行分析,以回答几个问题。

•1.报告的结果的数量每天都在变化。开发一个模型来解释这种变化,并使用您的模型为2023年3月1日报告的结果数量创建一个预测区间。单词的任何属性是否会影响在困难模式下玩家的分数的百分比?如果是,如何处理?如果不是,为什么不呢?

这一问要求对数据表中的数据进行分析和解释说明,总结变化规律,并选择合适的预测模型对未来数据进行预测。这里题目指出预测结果应该是一个区间,这说明传统的回归拟合预测不能满足题目要求,需要进行改进或者直接使用基于统计学的区间预测方法。

同时我们还需要分析单词的属性,给出的单词量虽然并不大,但直接对单词进行属性分析需要较深的NLP知识,不好切入。不妨我们可以从结果入手,求出每个单词选择困难模式的玩家平均解题次数作为特征变量进行聚类分析,得到少、适中、多三个或更多的类别,然后可以生成词云图观察对应类别中的词分布特点。分布特点可以人为构造,如统计各个字母出现频次,aeiou元音字母占比(aeiou存在少的往往生僻),重复字母个数(按照题目困难模式下拥有重复的字母会好猜)。分析聚类是否在以上特点中存在显著的分布趋势,即可得到结论。

如果有影响,就在出题中减少这类单词。无影响,说明情况即可。

•2.对于未来日期的给定未来解决方案词,开发一个模型,允许您预测报告结果的分布。换句话说,来预测未来一个日期的(1、2、3、4、5、6、X)的相关百分比。你的模型和预测有哪些不确定性?举一个你在2023年3月1日预测eerie这个词的具体例子。你对你的模型的预测有多有信心?

结合问题一的结论开发预测模型,直接将已知数据其输入预测模型进行训练,调整优化参数后得到预测模型,将新词已知条件输入,输出(1、2、3、4、5、6、X)的值,最后将结果进行归一化处理。(按照3问,该题不需要考虑难易程度)

测量模型的不确定性可以采用蒙特卡罗Dropout法(MC Dropout)和深度集成法。

3.开发和总结一个模型,按难度分类解决方案词。识别与每个分类关联的给定单词的属性。使用你的模型,怪诞这个词有多难?讨论你的分类模型的准确性。

结合问题一的结论开发预测模型,根据eerie词的特点去给该题的难易程度打分,显而易见,该词并不是一个常见的词汇,难度系数较高。生僻词可以作为一个评价维度,然后用问题一的分布特点作为其他评价指标,用综合评价法求出得分作为词的标签。其他已知词的难以标签则由聚类结果(对应平均分)决定。接着将其输入预测模型进行训练,输出(1、2、3、4、5、6、X)的值,最后将结果进行归一化处理。

测量模型的不确定性可以采用蒙特卡罗Dropout法(MC Dropout)和深度集成法,预测信心可以用训练集的准确率、AUC值来验证,也可以添加噪声来验证模型鲁棒性。

•4.列出并描述了这个数据集的其他一些有趣的特性。最后,在一封给《纽约时报》拼图编辑的一到两页的信中总结你的结果。

数据分析+可视化+总结结果

二、具体步骤及代码

问题一:

首先进行数据分析与可视化,观察规律

我们发现在记录的日期最开始的时候,报告的数量上升迅速,在2月分左右到达峰值,在较小幅度的震荡波动之后缓慢下降,逐渐稳定下来,维持在一个稳定的数据区间内波动。这说明在游戏推出时,人们由于新鲜感和宣传、传播等大量的涌入游戏网页进行猜谜,然而随着时间的推动,人们失去了新鲜感,逐渐退出,游戏的热度也随之下降。只有一些忠实的玩家会持续进行游戏。

然而,困难模式的相对数量变化波动并不大,我们可以认为,热衷于挑战困难模式的玩家属于一类比较固定的玩家群体。

建立解释变化的模型可以采用简单的拟合多项式模型来解释,也可以利用时间序列的模型来拟合,如移动平均、指数平滑等。

由于前述分析可以看出,数据的变化和时间有着紧密的关系,所以我们可以依赖时间建立预测模型。

由于我们序列的性质比较单一,(无明显季节等特征),可以直接采用holt线性预测方法。

import pandas as pd
import numpy as np
import  matplotlib.pyplot as plt


df=pd.read_excel('Problem_C_Data_Wordle.xlsx',skiprows=1)
data=df[['Date','Number of  reported results']]

def secondaryExponentialSmoothingMethod(list, n_average, alpha,
                                        day):  # 参数list为你要传入的时间序列,n_average表示数列两端取多少个数(要取奇数),alpha为平滑系数,day为向后预测的天数
    # 准备好解二元一次方程组的方法
    def fangChengZu(a1, b1, a2, b2, c1, c2):
        a = np.array([[a1, b1], [a2, b2]])
        b = np.array([c1, c2])
        x, y = np.linalg.solve(a, b)
        return x, y

    # 取数列两端各n_average个值加以平均
    list_left = list[0:n_average]  # data中前n_average个值构成的list
    list_right = list[n_average + 1:len(list)]  # data中后n_average个值构成的list
    list_left_average = np.mean(list_left)  # list_left包含元素的均值
    list_right_average = np.mean(list_right)
    x1 = (n_average + 1) / 2
    x2 = (len(list) - x1) + 1
    # print(list_left_average,list_right_average)

    # 代入线性趋势方程,解出a1,b1
    a1, b1 = fangChengZu(1, x1, 1, x2, list_left_average, list_right_average)
 # print(a1,b1)

    # 代入公式(12),解出S11,S12
    S11, S12 = fangChengZu(2, -1, a1, b1, -b1, (alpha / (1 - alpha)))
    # print(S11,S12)

    a_tao = 0  # 初始化
    b_tao = 0
    for i in range(len(list)):
        S1 = alpha * list[i] + (1 - alpha) * S11
        S2 = alpha * S1 + (1 - alpha) * S12
        S11 = S1
        S12 = S2
        a_tao = 2 * S1 - S2
        b_tao = (alpha / (1 - alpha)) / (S1 - S2)
    H = a_tao + b_tao * day  # 预测值
    return H


if __name__ == '__main__':
    data =data['Number of  reported results']  # 时间序列
    prediction_day1 = secondaryExponentialSmoothingMethod(data, 3, 0.5, 1) #预测下一天
    prediction_day2 = secondaryExponentialSmoothingMethod(data, 3, 0.5, 53)#预测3.2号
    print(prediction_day2)

plt.figure(figsize=(25, 7))
plt.plot(data,color='b', label='Original')
plt.plot(414,prediction_day2,color='c', label='Predict',marker='+')
plt.show()

或者采用简单参数的arima算法。

接下来为了判断词的特性,我们先先求出平均解题次数(因为X的不确定性,我们忽略该项),直接用SPSS进行k-means聚类分析。

分类结果

不同类对应词特征

一二问完整版已出,放在评论区,如失效请私信

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2023美赛C题:预测Wordle结果-思路详解及参考代码 的相关文章

随机推荐

  • 束缚游戏 html,束缚游戏

    束缚 描述的是一个锁链束缚的眼镜男 在游戏中会遇到各种障碍 探索一个普通居家男人的心灵利用铁球来通过这些障碍的横向平台解谜游戏 游戏简介 束缚 是一款卷轴平台益智游戏 主角是一个被锁链束缚的眼镜男 他可以利用铁球通过各种障碍 游戏的宗旨是探
  • linux与freertos程序兼容,从freeRTOS运行应用程序

    FreeRTOS 以及大多数RTOS 不像通用操作系统 GPOS 那样工作 它们通常不是为了动态加载和执行任意用户提供的应用程序而设计的 在大多数情况下 您使用RTOS是因为您需要硬实时响应 并且执行第三方代码可能会对此造成影响 大多数RT
  • vivado AXI_interconnector ID信号的一些总结

    很久没有写东西了 最近尽力了很多生活上的事情 最终也算圆满结局 言归正传 主要是以AXI4为背景介绍4组ID信号 以及其计算方式 对照vivado PG059以及PG247 见解都是基于个人所学 会有偏差还望谅解 AXI4中去掉了WID 所
  • 基于iframe的HTTP长连接实现

    关于什么是http长连接我不废吐沫了 有专业的解释 http www ibm com developerworks cn web wa lo comet 你可以去看看我们介绍一下在struts下的实现首先写一个test jsp 写一些片段
  • 【100天精通python】Day30:使用python操作数据库_数据库基础入门

    专栏导读 专栏订阅地址 https blog csdn net qq 35831906 category 12375510 html 1 数据库基础知识介绍 1 1 什么是数据库 数据库是一个结构化存储和组织数据的集合 它可以被有效地访问
  • android 网络自动同步时间慢问题

    问题描述 今天测试提了一个网络同步时间慢的bug 网络同步时间原理参考 https blog csdn net yin1031468524 article details 65447849 核心代码在NetworkTimeUpdateSer
  • 【遗传算法】【处理图像类问题】

    文章目录 一 前言 二 问题描述 三 算法介绍 四 其他知识点 Reference 一 前言 近期感兴趣的算法 以前没这么好奇过一个算法 时间没想象的焦虑 认真做一些事情 算法入门篇 二 问题描述 从前 一群扇贝在海岸边悠哉游哉地生活着 它
  • ThinkPHP3.2自带的七牛云配置使用

    利用七牛云私有空间存储文件 第一步 注册七牛云 创建空间 将空间设为私有 需要记下的东西 accessKey secrectKey domain bucket 第二步配置ThinkPHP 在config php添加 UPLOAD SITEI
  • STM32 FreeRTOS 内存问题

    1 STM32L151C8T6 内存 64Kb 的Flash 代码就是烧录在这里面的 16Kb 的RAM 程序跑起来之后的内存 相当于我们高考时发的草稿纸 直接影响程序的运行速度 可以用STM32 CubeMx 软件直接下载数据手册data
  • Calendar 中getActualMaximumd 功能

    String str new SimpleDateFormat yyyy MM dd HH mm ss SSS format new Date Calendar calendar Calendar getInstance Locale CH
  • 使用pytorch训练DCGAN----贰(代码解析)

    使用pytorch训练DCGAN 代码解析 上一篇 使用pytorch训练DCGAN 壹 这里我使用的代码时pytorch官方提供的源码 然后根据DCGAN原论文分板块分析 板块一 导包 from future import print f
  • javaWeb图书管理系统

    javaWeb图书管理系统 1 项目简单介绍 a 项目用到的技术 IDE Intellij IDEA 语言 java html ajax js 数据库 Mysql 数据库可视化 navicat web服务器 Tomcat 框架 mybati
  • C++使用当multiset插入相同的数时 新插入的数在已有数的左边还是右边呢

    答案 在multiset中 元素按照特定的顺序进行排序并存储 当向multiset插入相同的数时 新插入的数将被放置在已有数的右边 multiset允许存储重复的元素 并且保持了元素的顺序 因此 如果已经存在相同的数 新插入的数将被放置在它
  • c++在线编辑器

    c 在线编辑器 Compiler Explorer Coliru Ideone 乱糟糟的不推荐 C Shell CodingGround 可用来美化代码 慢的很 Judge0 IDE Compiler Explorer https godb
  • P1088 [NOIP2004 普及组] 火星人(全排列)

    题目链接 火星人 思路分析 分析题目题意得到 这个题目关于全排列的问题 题目输入N M分别代表对1 N进行全排列 火星人给出的大数就是1 N全排列的一种情况 对全排列的所有情况进行编号 例如下图 例如上图N 3 假设M 2 给出一种全排列序
  • ffmpeg推流收流 1920*1080视频 花屏

    自己用ffmpeg推流 然后再收流 小分辨率没有问题 当分辨率为1920 1080时 出现花屏现象 尤其是码率高时 现象更加明显 尝试各种办法 最后用下面的办法解决 在ffmpeg源码udp c中 define UDP MAX PKT SI
  • Ubuntu22.04配置静态IP-网关-DNS

    要在Ubuntu系统中配置网络 可以通过以下步骤进行操作 1 打开终端 可以使用 Ctrl Alt T 快捷键打开终端 或者从应用程序菜单中找到 终端 2 检查网络接口 输入以下命令检查当前系统中的网络接口列表 ifconfig a 接口列
  • 贝叶斯网络python实战(以泰坦尼克号数据集为例,pgmpy库)

    文章目录 贝叶斯网络简介 贝叶斯推断思路 贝叶斯网络 贝叶斯网络的实现 应用步骤 泰坦尼克数据集背景介绍 模型结构搭建 模型参数构建 贝叶斯估计器 推理 自动设计网络结构 gt 使用结构学习方法 模型保存 先验 练手数据集 Binary C
  • 三大排序算法

    目录 大O和推导过程 冒泡排序 冒泡排序的思路 冒泡排序的实现 冒泡排序的效率 O N 选择排序 选择排序的思路 选择排序实现 选择排序的效率 O N 插入排序 插入排序的思路 插入排序的实现 插入排序的效率 O N 大O和推导过程 公司规
  • 2023美赛C题:预测Wordle结果-思路详解及参考代码

    一 题目解析 总体来看与去年的C题比较相似 唯一一道有数据 不需要自己额外找 的题目 选题人估计也最多 本质是数据分析题目 需要建立预测模型 分类模型 特征挖掘等 相对来说出思路比较简单 想出彩比较难 所以在分析建模时一定要多维度思考 不然