и посмотреть медиа
Data analysis - DA SQL
и посмотреть медиа
Data analysis: SQL, Python.
Data analysis: SQL, Python.
AI bot for text-to-speech and voice cloning in Telegram. Create audio using neural network quickly and easily.
About data analysis: databases, SQL, Python and more for analysts.
Регрессия с контролем ковариат на Python Допустим, есть такие данные: ▶️customer_id - ID клиента ▶️avg_balance - Средний баланс за период ▶️total_spent - Суммарные траты за тот же период ▶️age - Возраст ▶️income - Доход (если есть) ▶️months_with_bank - Сколько клиент уже в банке (в месяцах) ▶️num_products - Количество продуктов в банке И есть гипотеза: "Чем больше средний баланс клиента, тем больше его суммарные расходы". Предположим, что мы провели корреляционный анализ и выяснили, что связь действительно есть. Теперь нужно выяснить причину этой связи: действительно ли баланс влияет на траты? Или же это траты влияют на баланс? Или есть какие-то иные факторы? И сейчас, продолжая тему причинно-следственных связей, построим регрессию с контролем ковариат, чтобы это выяснить. import pandas as pd import numpy as np import statsmodels.api as sm ###### #ИСТОЧНИК ДАННЫХ + СОЗДАНИЕ DF ###### X_simple = sm.add_constant(df[['avg_balance']]) y = df['total_spent'] model_simple = sm.OLS(y, X_simple).fit() print(model_simple.summary().tables[1]) Первым делом всё импортируем, создаём датафрейм и строим обычную линейную регрессию. Данные выведутся в виде таблицы, где нам важна ось Х. Таблица содержит несколько "технических" полей, которые в целом можно и проигнорировать. Можно оставить только самое важное: ▶️coef - коэффициент, показывающий, на сколько руб. вырастут суммарные траты при увеличении среднего баланса на 1 рубль. ▶️P>|t| - коэффициент стат значимости, показывает, насколько данным можно доверять. Если < 0.05, то всё хорошо. ▶️[0.025 0.975]. Доверительный интервал, который показывает "разброс" значений первого коэффициента coef. То есть траты не обязательно должны расти, например, на 0.4. Они могут вырасти и на 0.39, и на 0.41 - и это будет ок. 🟠Всё это может напоминать уже проведенный ранее корреляционный анализ, но всё же есть отличия. Корреляция Спирмена (которая использовалась ранее) отличается от линейной регрессии тем, что она даёт только лишь 1 число - коэффициент корреляции, который показывает лишь силу связи. Линейная регрессия же показывает уже конкретно с помощью coef, какой будет эффект. Также корр. Спирмена не учитывает причинность, тогда как линейная регрессия оценивает именно то, на сколько в среднем отличаются траты у клиентов с более высоким балансом при прочих равных. 🟠Еще стоит отметить, что это - первоначальные данные, которые просто описывают исходный датасет. Далее с этими данными мы будем сравнивать результаты ковариатов. 🟠Идем дальше: models = { 'age': ['age'], 'income': ['income'], 'tenure': ['months_with_bank'], 'products': ['num_products'] } for name, cov in models.items(): X = sm.add_constant(df[cov + ['avg_balance']]) coef = sm.OLS(y, X).fit().params['avg_balance'] print(f"С контролем {name:10}: {coef:.4f}") Этот скрипт построит регрессию с контролем ковариат (поля age, income, months_with_bank и num_products) и сравнит её с первоначальной. На выходе получим 4 значения coef при avg_balance - по одному для каждой модели с контролем одного фактора. Там, где эта разница больше всего (например, было 0.4, а стало 0.2 при факторе income), там и потенциально скрыто наибольшее влияние на траты. Следовательно, в дальнейшем анализе надо будет присмотреться не к avg_balance как к причине роста трат, а к income.
Открыть канал и посмотреть медиаOnly registered users can share their opinion.
Be the first to share your impression of this resource!