Кросс-эластичность спроса с логистической регрессией

Вопрос или проблема

Первый пост, будьте добры 😁 Я пытаюсь рассчитать кросс-эластичность спроса. Основная экономическая концепция проста, но при попытке реализовать её я вижу множество различных методов/равнений, которые дают разные результаты. Может кто-то сможет прояснить ситуацию?

Пример моих данных:

Бренд Цена_1 Цена_2 Цена_3 Цена_4 Цена_5
2 1.5 1.9 1.99 2.09 2.67
5 1.39 1.9 1.91 2.12 2.62
1 1.47 1.9 1.99 1.97 2.67
4 1.21 1.35 1.99 2.16 2.68
2 1.46 1.88 1.97 1.89 2.37

Цены относятся к цене брендов с 1 по 5; бренд – это тот бренд, который был куплен в этом случае. У меня ~15к строк.

Используя простой логистический регресс:

X = df[['Цена_1', 'Цена_2', 'Цена_3', 'Цена_4', 'Цена_5']]
y = df['Бренд']
lr = LogisticRegression(solver="sag")
lr.fit(X,y)
coefs = lr.coef_

Я хочу протестировать цены от 1.00 до 3.00, т.е. price_range = np.arange(1.00, 3.01, 0.01).

В этом случае я хочу измерить кросс-эластичность спроса на 5 на основе изменений цен в 4.

Один метод, который я нашёл, включает в себя взятие средней цены каждого товара, исключая целевой бренд, затем прогнозирование эластичности с использованием predict_proba и формулы эластичности (обратите внимание на разные формулы pe для бренда и кросс-бренда)

df_b4 = pd.DataFrame(index = np.arange(price_range.size))
df_b4['Цена_1'] = df['Цена_1'].mean()
df_b4['Цена_2'] = df['Цена_2'].mean()
df_b4['Цена_3'] = df['Цена_3'].mean()
df_b4['Цена_4'] = price_range
df_b4['Цена_5'] = df['Цена_5'].mean()
predict_b4 = lr.predict_proba(df_c4b4)
pr_b4 = predict_b4[:][:,3]
pe_b4 = coefs.iloc[3,3] * price_range * (1-pr_b4)

df_b4xb5 = pd.DataFrame(index = np.arange(price_range.size))
df_b4xb5['Цена_1'] = df['Цена_1'].mean()
df_b4xb5['Цена_2'] = df['Цена_2'].mean()
df_b4xb5['Цена_3'] = df['Цена_3'].mean()
df_b4xb5['Цена_4'] = df['Цена_4'].mean()
df_b4xb5['Цена_5'] = price_range
predict_b4xb5 = lr_brand.predict_proba(df_b4xb5)
pr_b4xb5 = predict_b4xb5[:][:,4]
pe_b4xb5 = -coefs.iloc[3,3] * price_range * pr_b4xb5

Этот метод использует тот же коэффициент для расчёта кросс-эластичности. Однако другой источник, который я видел, использовал другую формулу с другим коэффициентом и некоторым масштабированием:

pe_b4xb5 = coef.iloc[3,4] * price_range * pr_b4xb5 * (1-pr_b4xb5)

Другой метод проходит по новому диапазону цен:

X_temp = X.copy()
for price in price_range:
    X_temp['Цена_4'] = price
    P_5_test = lr.predict_proba(X_temp)[:,4]
    P_5 = lr.predict_proba(X_brand)[:,4]
    delta_P = P_5_test - P_5
    pe_b4xb5 = (delta_P / P_5) / ((price - X['Цена_4'].mean()) / X['Цена_4'].mean())

Все эти методы дают очень разные результаты:

График

Вертикальные линии представляют диапазон цен для бренда 4 в наборе данных, от 1.7 до 2.3.

Если это поможет, вот коэффициенты:

Коэф_Бренд_1 Коэф_Бренд_2 Коэф_Бренд_3 Коэф_Бренд_4 Коэф_Бренд_5
Цена_1 -3.92 1.27 1.62 0.57 0.44
Цена_2 0.66 -1.88 0.56 0.4 0.26
Цена_3 2.42 -0.21 0.5 -1.4 -1.31
Цена_4 0.7 -0.21 1.04 -1.25 -0.29
Цена_5 -0.2 0.59 0.45 0.25 -1.09

Любые советы будут очень приветствоваться – я всё еще довольно нов в этой области, и возможно, я что-то полностью упускаю.

Ответ или решение

Кросс-эластичность спроса с помощью логистической регрессии

Введение

Кросс-эластичность спроса — это важный экономический концепт, который позволяет понять, как изменения цены одного товара влияют на спрос другого товара. В данной работе вы рассматриваете использование логистической регрессии для расчета кросс-эластичности на основе предоставленных вами данных о ценах и брендах.

Постановка задачи

Вы используете логистическую регрессию для анализа влияния цен на выбор бренда. Ваша выборка содержит 15,000 записей, где для каждого наблюдения представлены цены на пять брендов. Следовательно, задача состоит в том, чтобы оценить, как изменение цены на один бренд (например, Бренд 4) влияет на спрос на другой бренд (например, Бренд 5).

Модель логистической регрессии

В вашей реализации используется метод LogisticRegression из библиотеки sklearn. Однако для вычисления кросс-эластичности требуется не только самостоятельная регрессия, но также правильная интерпретация зависимостей между переменными. Формула кросс-эластичности выглядит следующим образом:

[
E = \frac{\partial Q{target}}{\partial P{cross}} \cdot \frac{P{cross}}{Q{target}}
]

где:

  • (E) — кросс-эластичность,
  • (Q_{target}) — количество спроса на целевой бренд (например, Бренд 5),
  • (P_{cross}) — цена на перекрестный бренд (например, Бренд 4).

Подход к вычислению

1. Предсказание вероятностей спроса

Для начала вам необходимо предсказать вероятность выбора целевого бренда (Бренд 5) при различных ценах на Бренд 4. Вы правильно используете predict_proba() для получения вероятностей. Например:

predict_b4 = lr.predict_proba(df_b4)
pr_b4 = predict_b4[:, 4]  # Вероятность выбора Бренда 5

2. Расчет Кросс-эластичности

Используя предсказанные вероятности, вы можете применить формулу кросс-эластичности:

pe_b4xb5 = coefs[4][3] * price_range * (1 - pr_b4)

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

3. Альтернативные методы

Существуют и другие подходы, включающие цикл по диапазону цен для составления предположений о вероятностях на каждом шаге. Например:

X_temp = X.copy()
for price in price_range:
    X_temp['Price_4'] = price
    P_5_test = lr.predict_proba(X_temp)[:, 4]
    delta_P = P_5_test - P_5.mean()  # Изменение вероятностей
    pe_b4xb5 = (delta_P / P_5.mean()) / ((price - X['Price_4'].mean()) / X['Price_4'].mean())

Этот способ позволяет динамически конструировать кросс-эластичность для каждой цены и может быть более точным в условиях различий в данных.

Завершение

При проведении анализа кросс-эластичности, особенно с использованием логистической регрессии, критически важно следить за выбором формул и интерпретацией коэффициентов. Ваши результаты могут варьироваться в зависимости от метода расчета, поэтому рекомендуется проверять несколько подходов, как это было предложено.

Если у вас возникнут дополнительные вопросы или потребуется дальнейшая помощь с анализом кросс-эластичности, пожалуйста, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...