Расчет конечного рыночного распределения-конкурентное Программирование
Я столкнулся со следующим вопросом, когда практиковал конкурентное Программирование. Я решил ее вручную, как бы разрабатывая подход, но мой ответ неверен, и я не могу себе представить, как масштабировать мой подход.
Вопрос :
Кофе цепи Н конкурируют за долю на рынке ожесточенной рекламная битва. каждый день процент клиентов будет убеждаться переключаться с одной цепочки на другую.
Текущая рыночная доля и ежедневная вероятность клиента переключение дано. Если реклама будет работать вечно, каково будет окончательное распределение доли рынка?
Предположения : Общая доля рынка равна 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
(диагональ): вероятность того, что клиент останется с цепьюi
i != j
(вне диагонали): вероятность перехода клиента цепочкиj
в цепочкуi
P(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) = 1
N
- е) и заменить его этим выражением. Умножая, первая строка уравнения выглядит следующим образом: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 для удобства чтения.