准确的实时更新解决scheme,用于基于当前统计的分布预测

作为我当前项目的一部分,我需要find一个漂亮的Excel解决scheme:有线上游戏,人们获得经验(类似于SO代表),一旦获得足够的经验就移动到下一个层次(再次,这是非常像SO特权)。 当然,这需要每个人都有不同的时间:有些人在第一周获得了足够的经验,有些则需要5周才能通过。 统计如下:

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

也就是说,如果在这个星期我们有一些人join了这个游戏,那么在他们全部进入下一个级别之后的5周之后(有些人会放弃并离开,但是为了简单起见,我并没有把这个因素包括在条件列表中)。

至于每场比赛,现在的球员数量都很重要。 为了保持游戏的stream行和激动人心,每个级别都应该有一定数量的玩家。 显然,这个价值在不断变化:新人来了,而另一些人则上了一个台阶。 然而 – 这就是行动开始的地方! – 当前球员的这个最小值不是恒定的,并且可以根据许多因素谨慎。 为了简单起见,这意味着在未来的10-15周内,每周应该实现一组预测的最小数量的玩家(这是基于收集的统计数据,但是对于给定的任务,这是已知的组)。

到目前为止,图片看起来像这样:

样品1

而在最左边的一列中, 每周都有一些人join了游戏,每周下的一排大胆的数字就是这个星期到达下一个级别的人数。

有大量新人,计算每周的总体水平是微不足道的。 相反,并不是那么容易(至less对我来说) – 这是一个问题: 如何预测每周所需新手人数 (最左边的列) – 获得所需数量的人将通过下一周的下一个级别(底部的粗体行)?

到目前为止,我还找不到一个合适的,准确的解决scheme。 我尝试了所有可能的select – 从复杂和数组公式到Solver插件,但没有运气:我总是比方程式有更多的未知数。 但是,我很确定这不是一个不可能完成的任务:对于某些解决scheme,Solver可以提供相当接近所需值的数字,但不是每一组所需的值。

一些假设和(可能)重要的条件:

  1. 虽然不应该是一个问题,但实际每周分发%%%数字是根据需求更新数据库查询和进一步的Excel处理。
  2. 当然,从DB获得的实际新手值当然被认为是公式的已知值 。 显然他们是不能改变的,比如说如果实际上一周less than desired参加比赛的人less了一点,那就应该影响未来几周的计算预测来实现整体。
  3. 在一定的时间段内实际传递到下一个级别的玩家总数 应该保持不变 :例如,如果我们希望在每个从1月开始的冬季周一,至less有100个人join游戏,那么给我们8个整周,因此800个玩家总共。 但是,如果在1月份,我们每周实际上有80名新玩家 – 这意味着2月份的辛苦工作)。为确保“检查点” 小计每10周计算一次 。 无论如何,任何低价值都必须在未来几周内得到补偿。
  4. 相反的情况也是如此:如果我们在这个星期有更多的新人 ,我们可能会在下个星期吸引更less的玩家来达到下一个小计的目标。
  5. 玩家的stream动是无限的 – 图片样本只是为了清晰和更好的理解。 期望的值可以根据需要在将来进行计算 – 预测模式是可重复的。 如果这对于解决scheme来说很重要 – 让它从现在开始的10个星期
  6. 纯配方的解决scheme是最好的 – 甚至非常复杂。 不过,VBA仍然是一个可以接受的select。 在任何情况下,计算值的准确实时/按需更新绝对优于简单的,但是半手动或近似解决scheme。

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

请随时通过评论要求任何额外的细节或解释:虽然我尽可能的清楚和简单,但对我来说不重要的一些方面对于准确的解决scheme可能是至关重要的。

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

不需要VBA或复杂的数组公式 – 只需将一些简单的math公式转换成公式即可:

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

  • 如果一星期“join者”的5%达到一个新的水平,第一周(总体)应该有10个人做出来,第一个星期需要join10/5%= 200人。
    作为一个公式,这意味着:B5: =B12 ,A5: =B5/B2
  • 从那里你可以计算出从第一周开始的join者如何分配(比如,第五行的其余部分没有改变)
  • 在第二周,你想要35人成为下一个级别。 从前一步你知道,从第一周的join者你有30人达到这个水平。 因此,5人必须来自第二周的join者。 当他们再次使这个波的5%,总波必须是5/5%= 100
    在式中:C6: =C12-C5 ,A6: =C6/B2

现在不用为每周创build一个单独的公式,可以用一些INDEX函数来概括这个公式。 为此,我将你的例子扩展为包含标题列和行的星期数:

在这里输入图像说明

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

 = IF($ A5> C $ 4 + N(“没有人join此波”),0,
    如果(C $ 4 = $ A5 + N(“新浪潮的第一周:”)
        如果($ A5 = 1 + N(“本周必须预期的第一波:”),C18,
         N(“所有其他周,这一定是预期的数字减去 
           '前一周的'levelups':“)+(C $ 18-SUM(C4:C $ 5))
     )
     N(“加盟后的任何一周,申请每周上限比率
        ($ C $ 2:$ O $ 2,C $ 4- $ A5 + 1)* $ B5)
 )

以及每周期望的join者数量,即范围B5:B17:

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

这是更新的解决scheme文件 !