4

作为我当前项目的一部分,我需要为以下内容找到一个漂亮的 Excel 解决方案:有一个在线游戏,人们可以在其中获得经验(类似于 SO rep)并在获得足够的经验后立即进入下一个级别(再次,这是非常像 SO 特权)。当然这对每个人都需要不同的时间:有些人在第一周获得足够的经验,有些人需要 5 周才能通过关卡。统计如下:

Week from join: Week 1  Week 2  Week 3  Week 4  Week 5
Level up:       5%      15%     40%     30%     10%

也就是说,如果在这周我们有一些人加入了游戏,5周后他们都会进入下一个级别(有些人会放弃并离开,但为了简单起见,我没有在条件列表中包含这个因素)。

对于每场比赛,当前玩家的数量都很重要。为了使游戏保持流行和令人兴奋,每个级别都应该有明确的最少玩家数量。显然,这个价值在不断变化:新人来了,而其他人则更上一层楼。然而——这就是行动开始的地方!-当前玩家的这个最小值不是恒定的,可能会因许多因素而谨慎。为简单起见,这意味着在未来 10 到 15 周内,有一组预测的每周应该达到的最少玩家数量(这是基于收集的统计数据,但对于给定的任务,这是一个已知的集合)。

到目前为止一切顺利,图片如下所示:

样品 1

而最左边的一列是每周加入游戏的人数,每周下面的粗体数字行是本周通过的人数进入下一个级别

有很多新人,计算每周的总水平提升是微不足道的。相反的事情一点也不那么容易(嗯,至少对我来说) - 这就是问题:如何预测每周所需的新人数量(最左边的列) - 以获得所需的人数未来几周的下一个级别(底部的粗体行)?

到目前为止,我仍然找不到合适且准确的解决方案 2 周。我尝试了所有可能的选项 - 从复杂和数组公式到 Solver 插件,但没有运气:我总是有比方程更多的未知数。但是,我很确定这不是一项不可能完成的任务:对于某些解决方案,Solver 可以提供与期望值相当接近的数字,但并非针对每组期望值。

一些假设和(也许)重要条件:

  1. 虽然应该不是问题,但实际的每周分布 %%% 数字会根据需要通过 DB 查询和进一步的 Excel 处理进行更新。
  2. 到目前为止,数据库中可用的实际新人值当然被视为方程的已知值。显然,它们无法更改,例如,如果less than desired实际上一周内有多少人加入了游戏,那应该会影响对未来几周的总体预测。
  3. 实际进入下一关的玩家总数在特定时间段内应该保持不变:例如,如果我们希望在从 1 月开始的每个冬季周,至少有 100 人加入游戏,那么我们有 8 整周,因此有 800 名玩家总共。但是,如果 1 月份我们实际上每周有 80 名新玩家 - 这意味着 2 月份的努力工作)为了确定“检查点”小计每 10 周计算一次。在任何情况下,任何低值都必须在接下来的几周内得到补偿。
  4. 反之亦然:如果我们在给定一周内的新人数量超过预期- 我们可能会在下周吸引更少的玩家来实现下一个小计目标。
  5. 玩家的流量是无限的——提供图片样本只是为了清晰和更好地理解。可以根据需要在未来计算所需的值 - 预测模式是可重复的。如果这对解决方案很重要 -从当前开始 10 周
  6. 纯配方解决方案是可取的 - 甚至非常复杂。但是,VBA 仍然是一个可接受的选项。在任何情况下,计算值的准确实时/按需更新绝对优于简单但半手动或近似的解决方案。

至于我在这里的每一个问题 - 我不要求ready to play解决方案,但非常感谢正确的指导或宝贵的建议。我故意不将其发布到https://stats.stackexchange.com/ - 这更像是编程问题,因为理论显然很简单......或者可能太简单了,所以我看不到很明显的解决方案。

请随时通过评论请求任何其他详细信息或解释:尽管我试图尽可能清晰和简单,但某些对我来说并不重要的方面实际上可能对准确的解决方案至关重要。

示例文件(带有上述示例):https ://www.dropbox.com/s/q3bnagyet86i34r/StatPrognosis01.xlsx

4

1 回答 1

1

不需要 VBA 或复杂的数组公式 - 您只需要一些简单的数学转换为公式:

主要思想是,您可以通过“反转”计算来确定每周的数量。逻辑如下:(注:单元格引用基于屏幕截图,即黄色的 5% 为 B2):

  • 如果一周的“加入者”中有 5% 进入下一个级别,并且第 1 周(总体)应该有 10 人进入,则 10/5% = 200 人需要在第一周加入。
    作为一个公式,这意味着: B5: =B12, A5:=B5/B2
  • 从那里你可以计算出第一周的加入者是如何分布的(即第 5 行的其余部分没有变化)
  • 在第 2 周,您希望 35 人成为下一个级别。从前一步您知道,从第 1 周开始,您有 30 人达到了该级别。因此,必须有 5 人来自第 2 周的加入者。当他们再次形成该波的 5% 时,总波必须为 5/5%=100
    在公式中: C6: =C12-C5, A6:=C6/B2
  • ...

现在,您可以使用一些 INDEX 函数来概括这一点,而不是为每周创建一个单独的公式。为此,我将您的示例扩展为周数作为标题列和行:

在此处输入图像描述

要计算每个“每周加入波”的数量,即范围 C5:O17,请使用以下公式:

=IF($A5>C$4+N("这波还没有人加入:"),0,
    IF(C$4=$A5+N("新一波第一周:"),
        IF($A5=1+N("本周第一波必须是预期的数字:"),C18,
        N("所有其他周,这必须是预期的数字减去
          前几周的“升级”:")+(C$18-SUM(C4:C$5))
    ),
    N("加入后的任何一周,应用每周升级比率
       加入总人数:")+INDEX($C$2:$O$2,C$4-$A5+1)*$B5)
)

以及每周所需的加入者数量,即范围 B5:B17:

=指数($C5:$O5,$A5)/$C$2

这是更新的解决方案文件

于 2013-02-23T21:15:52.610 回答