Расчет конечного рыночного распределения-конкурентное Программирование
Я столкнулся со следующим вопросом, когда практиковал конкурентное Программирование. Я решил ее вручную, как бы разрабатывая подход, но мой ответ неверен, и я не могу себе представить, как масштабировать мой подход.
Вопрос :
Кофе цепи Н конкурируют за долю на рынке ожесточенной рекламная битва. каждый день процент клиентов будет убеждаться переключаться с одной цепочки на другую.
Текущая рыночная доля и ежедневная вероятность клиента переключение дано. Если реклама будет работать вечно, каково будет окончательное распределение доли рынка?
Предположения : Общая доля рынка равна 1,0, вероятность того, что клиент переключается независимо от других клиентов и дней.
Пример : 2 кофейные сети: A и B доля рынка A: 0,4 доля рынка B: 0,6.
Каждый день существует вероятность 0,2, что клиент переключается с A на B каждый день, существует вероятность 0,1, что a клиент переключается с B на A
input: market_share=[0.4,0.6],
switch_prob = [[.8,.2][.1,.9]]
output: [0.3333 0.6667]
все до сих пор является частью вопроса, я не формировал пример или предположения, они были даны с вопросом.
My_attempt : в моем понимании, вероятности переключения указывают на вероятность переключения с A на B.
Следовательно,
market_share_of_A = current_market_share - lost_customers + gained_customers and
marker_share_of_B = (1 - marker_share_of_A)
iter_1:
lost_customers = 0.4 * 0.8 * 0.2 = 0.064
gained_customers = 0.6 * 0.2 * 0.1 = 0.012
market_share_of_A = 0.4 - 0.064 + 0.012 = 0.348
marker_share_of_B = 1 - 0.348 = 0.652
iter_2:
lost_customers = 0.348 * 0.1 * 0.2 = 0.00696
gained_customers = 0.652 * 0.9 * 0.1 = 0.05868
market_share_of_A = 0.348 - 0.00696 + 0.05868 = 0.39972
marker_share_of_B = 1 - 0.32928 = 0.60028
my answer: [0.39972, 0.60028]
Как указывалось ранее, ожидаемые ответы - это [0.3333 0.6667].
-
А я нет поймите, где я ошибаюсь? Если что-то не так, то это должно быть мое понимание вопроса. Пожалуйста, изложите свои мысли.
-
В этом примере они продемонстрировали простой случай, когда было только два конкурента. А что, если их будет больше? Скажем, три -
A, B, C. Я думаю, что входные данные должны обеспечивать вероятности переключения в виде[[0.1, 0.3, 0.6]..], потому чтоAможет потерять своих клиентовB, а такжеC, и будет много примеров этого. Теперь мне придется вычислить по крайней мере доля рынка двух компаний, третьей будет(1-sum_of_all). И при вычислении доли рынка B мне придется вычислить потерянных клиентов, а также полученных, и формула будет(current - lost + gained). Полученная сумма будет равнаgain_from_A and gain_from_C. Это правильно?
1 ответ:
Исходя из моего комментария, эту задачу можно выразить в виде матричного уравнения.
Элементы матрицы "переход",
T(i, j)(размерыN x N) определяются следующим образом:Каков физический смысл этой матрицы? Пусть состояние рыночной доли представляется вектором
i = j(диагональ): вероятность того, что клиент останется с цепьюii != j(вне диагонали): вероятность перехода клиента цепочкиjв цепочкуiP(i)размераN, чьеi-е значение является рыночной долей цепочкиi. ВекторP' = T * P- этоследующее общее состояние после каждого дня.Имея это в виду, уравнение равновесия задается
T * P = P, то есть конечное состояние инвариантно при переходеT:| T(1, 1) T(1, 2) T(1, 3) ... T(1, N) | | P(1) | | P(1) | | T(2, 1) T(2, 2) ... | | P(2) | | P(2) | | T(3, 1) ... | | P(3) | | P(3) | | . . | * | . | = | . | | . . | | . | | . | | . . | | . | | . | | T(N, 1) T(N, N) | | P(N) | | P(N) |
Однако это неразрешимо само по себе -
Pможет быть определено только с точностью до ряда соотношений между его элементами ( техническое название этой ситуации ускользает от меня - посколькуMBoпредполагает, что это связано с вырождением). Существует дополнительное ограничение, что доли складываются до 1:Мы можем выбрать произвольное значение доли (скажем,P(1) + P(2) + ... P(N) = 1N- е) и заменить его этим выражением. Умножая, первая строка уравнения выглядит следующим образом:T(1, 1) P(1) + T(1, 2) P(2) + ... T(1, N) (1 - [P(1) + P(2) + ... P(N - 1)]) = P(1) --> [T(1, 1) - T(1, N) - 1] P(1) + [T(1, 2) - T(1, N)] P(2) + ... "P(N - 1)" = -T(1, N)Эквивалентное уравнение для второго ряда:
[T(2, 1) - T(2, N)] P(1) + [T(2, 2) - T(2, N) - 1] P(2) + ... = -T(2, N)
Чтобы обобщить общую закономерность, определим:
A матрица
S(i, j)(размеры[N - 1] x [N - 1]):- S(i, i) = T(i, i) - T(i, N) - 1 - S(i, j) = T(i, j) - T(i, N) (i != j)Вектор
Q(i)размераN - 1, содержащий первыеN - 1элементыP(i)Вектор
R(i)размераN - 1, такой, чтоR(i) = -T(i, N)Уравнение тогда становится
S * Q = R:| S(1, 1) S(1, 2) S(1, 3) ... S(1, N-1) | | Q(1) | | R(1) | | S(2, 1) S(2, 2) ... | | Q(2) | | R(2) | | S(3, 1) ... | | Q(3) | | R(3) | | . . | * | . | = | . | | . . | | . | | . | | . . | | . | | . | | S(N-1, 1) S(N-1, N-1) | | Q(N-1) | | R(N-1) |Решение вышеприведенного уравнения дает
Обратите внимание, что вы можете перевернуть знаки вQ, что дает первыеN - 1значения акций (и, конечно, последнее тоже из ограничения). Методы для этого включают гауссово исключение иразложение LU , оба из которых более эффективны, чем наивный путь прямого вычисленияQ = inv(S) * R.SиRДля немного более удобной оценки.
Игрушечный пример, приведенный выше, оказывается довольно тривиальным:
| 0.8 0.1 | | P1 | | P1 | | | * | | = | | | 0.2 0.9 | | P2 | | P2 | --> S = | -0.3 |, R = | -0.1 | --> Q1 = P1 = -1.0 / -0.3 = 0.3333 P2 = 1 - P1 = 0.6667
Пример для
N = 3:| 0.1 0.2 0.3 | | -1.2 -0.1 | | -0.3 | T = | 0.4 0.7 0.3 | --> S = | | , R = | | | 0.5 0.1 0.4 | | 0.1 -0.6 | | -0.3 | | 0.205479 | --> Q = | | , P3 = 0.260274 | 0.534247 |
Пожалуйста, простите форматирование в стиле Робинзона Крузо - я попробую позже написать их в LaTeX для удобства чтения.