Data Science на пальцах: учимся анализировать данные на простых примерах
Разберём Data Science на простых и наглядных примерах — как считать средний чек, искать узкие места в воронке и проверять гипотезы без сложных формул. Всё по-человечески, с логикой, а не магией статистики.
Зачем вообще Data Science?
Data Science — это не «магия ИИ», а аккуратные вопросы к данным:
Что происходит? — описательная аналитика
Почему это происходит? — диагностическая
Что будет дальше? — прогноз
Что делать? — рекомендации
Базовый цикл: собрать → очистить → посмотреть (EDA) → проверить гипотезу → смоделировать → объяснить результат и принять решение.
Правило №1: результат должен приводить к действию. Цифра ради цифры — мусор.

Мини-шпаргалка: что считать и чем мерить
Вопрос | Что считаем | Инструмент | Тип метрики | Что означает |
|---|---|---|---|---|
Сколько тратят клиенты? | Средний чек (mean), медиана | Pandas/SQL | Описательная | Базовый ориентир по выручке |
Насколько «живой» спрос? | Конверсия, частота покупок | Группировки, cohort | Описательная/диагностическая | Понимание воронки |
Работает ли баннер? | Δ конверсии, t-тест/бутстрэп | SciPy/бутстрэп | Инф. статистика | Вероятность, что эффект не случайность |
Что влияет на отклик? | Корреляции/фичевая важность | corr(), простая регрессия | Диагностическая | Какие факторы реально значимы |
Сколько продадим завтра? | Прогноз (линейная/деревья) | scikit-learn | Прогнозная | Оптимизируем закупки/рекламу |
Пример 1. Кофейня и средний чек
Сценарий: владелец хочет понять, почему выручка «прыгает».
Данные: таблица orders (id, дата, сумма, способ оплаты).
Что делаем:
Считаем средний чек и медиану.
Строим распределение чеков.
Смотрим день недели — где пиковые дни?
df['weekday'] = df['date'].dt.day_name()
avg_check = df['amount'].mean()
median_check = df['amount'].median()
by_weekday = df.groupby('weekday')['amount'].mean().sort_values(ascending=False)
Выводы: если средний чек >> медианы — у вас длинный «хвост» дорогих заказов. Пики по пятницам? Значит, промо лучше запускать в четверг вечером.

Пример 2. Конверсия из просмотра в покупку
Сценарий: интернет-магазин: много просмотров, мало покупок.
Данные: события view_product и purchase с user_id.
views = events.query('event=="view_product"').user_id.nunique()
carts = events.query('event=="add_to_cart"').user_id.nunique()
buys = events.query('event=="purchase"').user_id.nunique()
conv_view_to_cart = carts / views
conv_cart_to_buy = buys / carts
Вывод: если просадка на этапе «корзина → покупка» — проверьте UX, ошибки формы или стоимость доставки.
Пример 3. Быстрый A/B-тест баннера
from statsmodels.stats.proportion import proportions_ztest
count = np.array([buys_B, buys_A])
nobs = np.array([visits_B, visits_A])
stat, p = proportions_ztest(count, nobs)
Вывод: даже при +0.8 п.п. разницы стоит учитывать доверительный интервал и стоимость трафика.
Пример 4. Прогноз продаж «на завтра»
X = pd.get_dummies(df[['day_index','weekday']], drop_first=True)
y = df['sales']
model.fit(X_train, y_train)
pred = model.predict(X_test)
mae = np.mean(np.abs(pred - y_test))
Вывод: прогноз нужен, чтобы снизить неопределённость, а не для «точного угадывания».
Пример 5. Что реально влияет на отклик?
Сценарий: email-рассылка. Почему одни письма открывают, а другие — нет?
Идея: проверить корреляции и логистическую регрессию для оценки влияния признаков.
Чистка данных — половина успеха
Проблема | Как заметить | Что делать |
|---|---|---|
Пропуски |
| Удалить или заменить медианой |
Выбросы | Boxplot, z-score | Ограничить по бизнес-правилам |
Дубликаты |
| Очистить ключи |
Разные форматы дат | Ошибки парсинга | Использовать |
Неполные категории | Доля < 1% | Объединить в «Other» |
В Кодике мы даём короткие модули по Python и аналитике с задачами «как в жизни» — загрузка CSV, чистка, воронки, mini A/B-тест и первая модель. Без воды и с понятными итогами.
А ещё у нас есть активный telegram-канал, где мы обсуждаем крутые идеи, делимся опытом и вместе разбираем задачи — учиться становится не только полезно, но и весело.