Расчет конечного рыночного распределения-конкурентное Программирование


Я столкнулся со следующим вопросом, когда практиковал конкурентное Программирование. Я решил ее вручную, как бы разрабатывая подход, но мой ответ неверен, и я не могу себе представить, как масштабировать мой подход.

Вопрос :

Кофе цепи Н конкурируют за долю на рынке ожесточенной рекламная битва. каждый день процент клиентов будет убеждаться переключаться с одной цепочки на другую.

Текущая рыночная доля и ежедневная вероятность клиента переключение дано. Если реклама будет работать вечно, каково будет окончательное распределение доли рынка?

Предположения : Общая доля рынка равна 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].
  1. А я нет поймите, где я ошибаюсь? Если что-то не так, то это должно быть мое понимание вопроса. Пожалуйста, изложите свои мысли.

  2. В этом примере они продемонстрировали простой случай, когда было только два конкурента. А что, если их будет больше? Скажем, три - 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 5

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 для удобства чтения.