我一直在尝试用线性回归来预测学生未来的考试成绩。我还发现了一些可能适合我的数据的分布,我想进一步使用它们来运行蒙特卡罗模拟。
我的蒙特卡洛模拟的基本轮廓是通过大量模拟来模拟每个学生的考试成绩。然后我想用每次模拟的分数来对特定班级的学生进行排名,例如班级第一名,第二名等
在excel中,我一直在实现这一点,我一直在使用'countifs'函数对学生在每个班级中的位置进行排名,然后计算每个学生在大量模拟样本中获得全班第一名的次数。这是初稿,看起来它正朝着我目前满意的方向前进。
我的问题是——我的样本量太大,无法有效地在 excel 上运行模拟测试分数和 countifs/rank。我已经单独运行模拟以减轻 excel 文件的工作量,但它仍然太慢。我想知道这是否可以在 BigQuery 中实现?我一直在学习 BigQuery 的一些基础知识,到目前为止使用起来既简单又愉快。
任何帮助将不胜感激。
谢谢
这里是学生成绩的模拟。每个
grade
介于0到99之间。99是最高等级。我们模拟了 25 个学生id
s 和 20 个测试run
。每个测试由所有学生参加,结果是随机的。完整列表保存在临时表中,可用于对结果进行进一步分析。每次运行都会返回其他结果,并且在 CTE (With) 中使用可能会由于重新计算而导致不同的结果。
With tbl as
(Select
id,
round(rand()*100) as grade,
run
from
unnest(generate_array(1,25)) as id,
unnest(generate_array(1,20)) as run
)
Select * ,
rank() over (partition by run order by grade desc) as rank
from tbl
order by run, grade desc
rank
窗口函数想要有一个区域来创建排名,这里是每个测试,由run
定义。然后排名将按grade
排序。