Вопрос или проблема
Первый пост, будьте добры 😁 Я пытаюсь рассчитать кросс-эластичность спроса. Основная экономическая концепция проста, но при попытке реализовать её я вижу множество различных методов/равнений, которые дают разные результаты. Может кто-то сможет прояснить ситуацию?
Пример моих данных:
Бренд | Цена_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())
Этот способ позволяет динамически конструировать кросс-эластичность для каждой цены и может быть более точным в условиях различий в данных.
Завершение
При проведении анализа кросс-эластичности, особенно с использованием логистической регрессии, критически важно следить за выбором формул и интерпретацией коэффициентов. Ваши результаты могут варьироваться в зависимости от метода расчета, поэтому рекомендуется проверять несколько подходов, как это было предложено.
Если у вас возникнут дополнительные вопросы или потребуется дальнейшая помощь с анализом кросс-эластичности, пожалуйста, не стесняйтесь обращаться.