Роль: Аналитик данных (GameDev)
Задача: Проверить баланс экосистемы покемонов для предстоящего игрового обновления
Датасет: Pokemon with stats (721 покемон, поколения 1–6)
- Описание проекта
- Ключевые находки
- Структура репозитория
- Установка и запуск
- Методология
- Результаты моделирования
- Рекомендации для бизнеса
- Автор
Исследование направлено на анализ баланса игровой экосистемы покемонов. Проверены 4 ключевых гипотезы геймдизайна:
- Дисбаланс типов: Какие типы доминируют по общей силе?
- Легендарные vs обычные: Статистически значимо ли легендарные сильнее?
- Эволюция по поколениям: Есть ли «инфляция силы» (power creep)?
- Предсказание легендарности: Можно ли по характеристикам предсказать легендарность?
| Находка | Значение | P-value |
|---|---|---|
| Дисбаланс типов: Dragon сильнее Bug на | 45% | — |
| Легендарные сильнее обычных на | 53% | < 0.001 |
| Двойной тип даёт преимущество | +44 пункта | < 0.001 |
| Точность модели Random Forest | 94% | ROC-AUC = 0.970 |
- Главный предиктор легендарности: атакующий потенциал (
offense = attack + sp_atk) - Инфляции силы между поколениями нет, но 4-е поколение требует проверки (+8% к средней)
pokemon-analysis/
├── README.md # Описание проекта
├── requirements.txt # Зависимости
├── .gitignore # Исключения Git
├── data/
│ ├── pokemon_cleaned.csv # Чистый исходный датасет
│ └── Pokemon.csv # Исходный датасет
├── notebooks/
│ └── pokemon_analysis.ipynb # Основной ноутбук с анализом
└── visuals/ # Сохранённые визуализации
├── type_strength_boxplot.png
├── type_strength_barplot.png
├── legendary_violin.png
├── generation_trend.png
├── learning_curve_rf.png
├── gen_legendary_split.png
├── legendary_by_gen.png
└── roc_curves.png
git clone https://github.com/ВАШ_НИК/pokemon-analysis.git
cd pokemon-analysispython -m venv venv
# Windows
venv\Scripts\activate
# macOS / Linux
source venv/bin/activatepip install -r requirements.txtjupyter notebook notebooks/pokemon_analysis.ipynb- pandas, numpy — обработка данных
- matplotlib, seaborn — визуализация
- scipy — статистические тесты (t-test, Mann-Whitney, χ²)
- scikit-learn — машинное обучение (Logistic Regression, Random Forest)
| Тест | Гипотеза | Результат |
|---|---|---|
| Независимый T-test | Легендарные > Обычные | Подтверждено (p = 9.36e-47) |
| Независимый T-test | Двойной тип > Одинарный | Подтверждено (p < 0.001) |
| χ²-test | Распределение типов по поколениям равномерно | Подтверждено (p = 0.89) |
Признаки для моделей:
- Базовые характеристики:
hp,attack,defense,sp_atk,sp_def,speed - Агрегаты:
offense,defense_total,bulk - Категориальные:
type_1(One-Hot Encoding),has_second_type
Разделение: 80% train / 20% test (stratified)
| Модель | Accuracy | ROC-AUC | Precision (лег.) | Recall (лег.) |
|---|---|---|---|---|
| Logistic Regression | 92% | 0.953 | 0.50 | 0.92 |
| Random Forest | 94% | 0.970 | 0.64 | 0.69 |
| Признак | Важность | Интерпретация |
|---|---|---|
offense (attack + sp_atk) |
0.187 | Главный фактор — атакующий потенциал |
sp_atk |
0.147 | Специальная атака |
speed |
0.128 | Скорость |
sp_def |
0.119 | Специальная защита |
hp |
0.092 | Живучесть |
Бизнес-инсайт:
offense > 200— маркер высокого риска при создании нового покемона.
- Усилить слабые типы (Bug, Normal, Poison) — добавить уникальные способности или пересмотреть базовые характеристики
- Следить за
offense— значение > 200 резко повышает вероятность легендарности - Второй тип можно давать свободно — он практически не влияет на баланс легендарности
- Контролировать долю легендарных — не превышать 10–12% в новых поколениях
- Сохранять среднюю силу — ориентир 420–440 для обычных покемонов
- Использовать модель RF как инструмент пре-модерации новых покемонов (порог 0.5–0.6)
Аналитик данных — Леонид
Проект выполнен в рамках портфолио по анализу данных.
Дата: Август 2026