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週間、適切で正確な解決策を見つけることができません。複雑な数式や配列数式からソルバーアドインまで、考えられるすべてのオプションを試しましたが、運が悪かったのです。方程式よりも未知数が常に多いのです。ただし、これは不可能な作業ではないと確信しています。一部のソリューションでは、ソルバーは目的の値にかなり近い数値を提供できますが、目的の値のすべてのセットに対しては提供できません。

いくつかの仮定と(おそらく)重要な条件:

  1. 問題はないはずですが、実際の週次配布%%%の数値は、DBクエリとさらにExcel処理を介してオンデマンドで更新されます。
  2. もちろん、DBからこれまでに入手可能な実際の新規参入者の値は、方程式の既知の値と見なされます。明らかに、それらを変更することはできません。たとえばless than desired、実際に1週間の人数がゲームに参加した場合、全体として達成するために、将来の数週間の計算された予測に影響を与えるはずです。
  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になります):

  • 1週間の「参加者」の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関数を使用してこれを一般化できます。このために、両方のヘッダー列と行として週番号で例を拡張しました。

ここに画像の説明を入力してください

「1週間あたりのジョイナーウェーブ」あたりの数、つまり範囲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の場合:

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

これが更新されたソリューションファイルです

于 2013-02-23T21:15:52.610 に答える