2025-0117_招待券の使い方による、カフェタッチ回数の差の検証
0:結論
「招待券を用いた追加招待(以下追加招待)」に関する、平均カフェタッチ回数をコードで試作
推しが2人いる場合、招待券の枚数・訪問確率に依らず「推しが2人ともカフェに来ている場合にのみ追加招待」をすべき
1:今回の内容のきっかけ
1-1:前回の内容
前回の記事で追加招待について話をしたと思う。
この文章の最後に「(招待券の使い方による)それぞれの月間カフェタッチ回数」をコードで出す事も可能と書いた部分があり、実際にそれをやるのは価値があると思う。
今回は「招待券がある場合のベストな招待方法」について、実際にコードを書いて平均タッチ回数を出してみた。
1-2:前提として
現段階では「(招待券を使わずに来る)招待確率は全く不明なので、ある程度あると思われる確率(30%,50%,70%)で試すことにする。
極端な話100%招待券を使わずに来るのであればずっと追加招待すればいいだけになるし、全く来ないのであればそもそも検証の必要もない。
2:検証
ここではカフェタッチ回数の設定について紹介する。
2-1:前提
以下を前提とする。
なお推しという言葉を使うのは分かりにくくなるので、私の推しである「ウイ」「イロハ」で統一し、「ウイ」の方を優先してあげたいものとする。
カフェは「ウイ家具部屋」「イロハ家具部屋」とし、「ウイ部屋にイロハの家具を置く」という事はしない
一回の抽選で4回必ずタッチするものとする
4時16時に必ず訪問、またその訪問でチケットを使用した場合はチケットは20時間後(つまり2回先の抽選で)復活するものとする
チケットを使うカフェの場所は問わない、つまり
「チケットを使う部屋にはウイは必ず居ない」とする
上の条件は「抽選前にチケットが無い部屋を『ウイ家具部屋』にする」ので、そこまで強い条件ではないと思われる
その他パラメータは以下で設定
スタート時は招待券2枚
家具部屋に推しが訪問する確率(以下:訪問確率)を両方固定で[0.7,0.5,0.3]の3シチュで行う、家具を置いてない部屋に推しが来る確率は0.005で固定
イタレーションは10,000,000回抽選(要は5,000,000日継続した場合の)平均タッチ回数で評価
2-2:検証のケース
今回は2ケースに分けて検証を行う、「招待券2枚」「招待券1枚」持っている時の行動なので、それぞれ片方を固定した上で検証を行う。
case1:「招待券2枚」持っている時
「招待券2枚持っている時」の行動は以下4種類の行動がとれる、なお「招待券1枚」の時の行動は「招待券温存(追加招待は行わない)」の行動を取る
招待券温存:「(招待券を使った)追加招待」を絶対にしない
両方訪問時のみ:「ウイもイロハも居る時」のみウイを追加招待する(ウイが居てイロハが居ないときはイロハを招待する)
ウイ偏愛:(可能なら)必ずウイを追加招待する、ウイが来ていたら必ず追加招待、イロハが来ていてもイロハは追加招待しない
両方呼び出し:(可能なら)必ずウイ・イロハを追加招待する
case2:「招待券1枚」温存時
「招待券1枚持っている時」の行動は以下3種類の行動がとれる、なお「招待券2枚」の時の行動は「両方訪問時のみ」の行動を取る
招待券温存:「(招待券を使った)追加招待」を絶対にしない
両方訪問時のみ:「ウイもイロハも居る時」のみウイを追加招待する(ウイが居てイロハが居ないときはイロハを招待する)
ウイ偏愛:(可能なら)必ずウイを追加招待する
3:結果
ここでは数値実験の結果を記載する。
3-1:結論の要約
招待券が1枚でも2枚でも、ほぼ全てのケースにおいて「両方訪問時のみ」の合計平均タッチ回数は上
特に招待券が1枚の場合、訪問確率が高いとバカに出来ない差がある
訪問確率が大きい場合1抽選当たり平均0.26回分のタッチの差が生まれ、2日に1回好感度15の差が得られる
一方訪問確率が低い場合は1抽選当たり平均0.06回分のタッチ差しか生まれず、9日に1回位しか差がない
今回はあくまでも「推しを同時に上げる場合」の考察、組み合わせや目的で視点が変わる
「推しはゆっくりでもいいけど、総力戦目的の生徒も早めに上げたい」、「面倒くさい」場合は「招待券温存(追加招待はしない)」がオススメ
「単推し、本当についでで総力戦も視野」程度なら「推し偏愛」をオススメ、ただしどんなに推しの追加招待したいときでも、招待券2枚あるときに強引に追加招待するのはむしろ効率が悪くなる
3-2:res_case1
3-2-1:数値結果
3-2-2:結果からの考察
少なくともウイの好感度の視点だけで言えば全てにおいて「両方訪問時のみ」追加招待するのが効率が良いとわかった。
特に「ウイ偏愛」のタッチ方法と比較して、ほぼ全てのケースで勝っているという点は大変素晴らしいといえる。(偏愛と言いながらウイのタッチ回数ですら負けしてるのはちょっとワラった・・・w)
一方イロハの好感度で言えば、「(訪問確率が低い場合は)両方呼び出しの方が効率が良い」という計算になる。
「お互いの好感度を同時に上げていきたい」という視点で言えば、案外捨てた方法でもないかもしれない。
(合計タッチ回数は悲惨なのでその点は良く考えて行動をしてほしい)
3-3:res_case2
3-3-1:数値結果
3-3-2:結果からの考察
「招待券温存」と「両方訪問時のみ」を比較すると訪問確率に強く依存する結果となった。
訪問確率が高いと合計で0.26回分のカフェタッチの差が生まれ、この数値はバカに出来ない。
一方訪問確率が低い場合はと合計で0.06回分のカフェタッチの差、正直誤差である。
また「両方訪問時のみ」と「ウイ偏愛」で比較すると全訪問確率で合計では大きく劣るが、それはイロハタッチが極端に下がる故。
ウイタッチを目的とするのであれば約0.2回分のカフェタッチ上昇が見込め、この数値自体はバカに出来ない数値と言える。
4:おわりに
4-1:数値結果=あくまで目安
今回の結果はあくまで数字の上での平均カフェタッチ回数。
実際でいえば「メンテナンス」「カフェタッチ忘れ」等のアクシデントがあり、この数値通りにうまく行くとは限らない。
一応「両方訪問時のみ」追加招待する方法が合計の平均タッチ回数が高く出たものの、数字とは所詮目安、自分の行動に納得できるための一つの手段に過ぎない。。
4-2:目標を持ち、数値結果から自分の意思決定につなげる
(今回の数値結果から)今後私は「両方訪問時のみ」追加招待を行おうと思う。
カフェタッチ自体は月に得られる好感度で言えば約20%(3600/17500)を程度であり、贈り物と比較すると大して大きくはない。
とはいえ、ウイとイロハを同時に絆100にさせるためには長い時間が必要でありマラソンである以上、二人のタッチ回数を稼ぐ事が一番大事だといえる。
だが目線を変えた場合、例えば「メインの推しとは別に総力戦目的の生徒もあげたい」となると招待券の使い方も変わると思う。
少なくともやみくもに推しを招待するという選択肢はしないだろうし、「両方訪問時のみ」の選択も案外行わないと思われる。
今回の結果が貴方のカフェタッチのやり方に影響を与えたのであれば幸いである。
5:code
import pandas as pd
import numpy as np
import random
_percent_ui_room = 0.3
_percent_iroha_room = 0.3
# タッチ確率条件
## 家具アリの確率
_percent_ui_come_to_ui_room = [1 - _percent_ui_room , _percent_ui_room]
_percent_iroha_come_to_iroha_room = [1 - _percent_iroha_room , _percent_iroha_room ]
## 家具無の確率(各0.5%の設定)
_percent_ui_come_to_iroha_room = [0.995, 0.005]
_percent_iroha_come_to_ui_room = [0.995, 0.005]
## 試行回数
_try = 10000000
ベース(1回・2回ともに「招待券温存」)
## タッチコード
ui_touch = 0
iroha_touch = 0
room_ticket = 2
for i in range(0, _try):
## 訪問時リセット
ui_come_ui_room = 0
ui_come_iroha_room = 0
iroha_come_ui_room = 0
iroha_come_iroha_room = 0
## それぞれの部屋でウイ・イロハ判定
### ウイ
ui_come_ui_room = random.choices([0,1], k = 1, weights = _percent_ui_come_to_ui_room)[0]
if ui_come_ui_room == 0:
ui_come_iroha_room = random.choices([0,1], k = 1, weights = _percent_ui_come_to_iroha_room)[0]
### イロハ
iroha_come_ui_room = random.choices([0,1], k = 1, weights = _percent_iroha_come_to_ui_room)[0]
if iroha_come_ui_room == 0:
iroha_come_iroha_room = random.choices([0,1], k = 1, weights = _percent_iroha_come_to_iroha_room)[0]
## タッチ
### ウイ・イロハ普通に来た
ui_come = ui_come_ui_room + ui_come_iroha_room
iroha_come = iroha_come_ui_room + iroha_come_iroha_room
## チケットフラグ
### チケット0枚⇒どの状態でも次はチケット2になる
if room_ticket == 0:
room_ticket = 2
### チケット1枚⇒二人とも来たら次はチケット2
#### それ以外⇒チケット変化なし+ウイ優先使用
elif room_ticket == 1:
if ui_come + iroha_come == 2:
room_ticket = 2
elif ui_come == 0:
ui_come = 1
elif iroha_come == 0:
iroha_come = 1
### チケット2枚⇒それぞれ来ないなら使用、追加訪問は行わない
elif room_ticket == 2:
if ui_come == 0:
ui_come = 1
room_ticket = room_ticket - 1
if iroha_come == 0:
iroha_come = 1
room_ticket = room_ticket - 1
## タッチ回数
if ui_come == 1:
ui_touch = 4 + ui_touch
if iroha_come == 1:
iroha_touch = 4 + iroha_touch
print(ui_touch/_try)
print(iroha_touch/_try)
共に「両方訪問時のみ」のコード
## タッチコード
ui_touch = 0
iroha_touch = 0
room_ticket = 2
for i in range(0, _try):
## 訪問時リセット
ui_come_ui_room = 0
ui_come_iroha_room = 0
iroha_come_ui_room = 0
iroha_come_iroha_room = 0
extra_ui_come = 0
## それぞれの部屋でウイ・イロハ判定
### ウイ
ui_come_ui_room = random.choices([0,1], k = 1, weights = _percent_ui_come_to_ui_room)[0]
if ui_come_ui_room == 0:
ui_come_iroha_room = random.choices([0,1], k = 1, weights = _percent_ui_come_to_iroha_room)[0]
### イロハ
iroha_come_ui_room = random.choices([0,1], k = 1, weights = _percent_iroha_come_to_ui_room)[0]
if iroha_come_ui_room == 0:
iroha_come_iroha_room = random.choices([0,1], k = 1, weights = _percent_iroha_come_to_iroha_room)[0]
## タッチ
### ウイ・イロハ普通に来た
ui_come = ui_come_ui_room + ui_come_iroha_room
iroha_come = iroha_come_ui_room + iroha_come_iroha_room
## チケットフラグ
### チケット0枚⇒どの状態でも次はチケット2になる
if room_ticket == 0:
room_ticket = 2
### チケット1枚⇒イロハ居ないならイロハ、両方いるならウイに追加
elif room_ticket == 1:
if ui_come == 0:
ui_come = 1
elif iroha_come == 0:
iroha_come = 1
else:
extra_ui_come = 1
### チケット2枚⇒それぞれ来ないなら使用
elif room_ticket == 2:
## チケット2枚あり、かつウイロハが居るときはウイを追加招集
if ui_come == 1 and iroha_come == 1:
extra_ui_come = 1
room_ticket = room_ticket - 1
if ui_come == 0:
ui_come = 1
room_ticket = room_ticket - 1
if iroha_come == 0:
iroha_come = 1
room_ticket = room_ticket - 1
## タッチ回数
if ui_come == 1:
ui_touch = 4 + ui_touch + extra_ui_come
extra_ui_come = 0
if iroha_come == 1:
iroha_touch = 4 + iroha_touch
print(ui_touch/_try)
print(iroha_touch/_try)