{
  "id": 589319,
  "title": "3rd Place Solution/Privat Score: 0.49508",
  "url": "/competitions/alpha-summer-challenge/writeups/grigorii-knyazhenko-3rd-place-solution-privat-scor",
  "author_name": "",
  "post_date": "2025-07-11T23:50:26.651968100Z",
  "votes": 5,
  "comment_count": 2,
  "views": 0,
  "content": "<h3>Прогнозирование минимального баланса клиентов банка</h3>\n<p>Оформление задачи находится в alpha-summer.ipynb по ссылке: <a href=\"https://github.com/antis0c1al/Alfa-Summer-Challenge/blob/main/alpha-summer.ipynb\" target=\"_blank\">https://github.com/antis0c1al/Alfa-Summer-Challenge/blob/main/alpha-summer.ipynb</a></p>\n<h4>Описание задачи</h4>\n<p><strong>Цель</strong>: Предсказать, какие клиенты сохранят положительный баланс на своих счетах. Банк заинтересован в поддержании ненулевого остатка, так как обнуление невыгодно.</p>\n<p><strong>Целевая переменная</strong>: Шкала от 0 (баланс обнулён) до 7 (высокий баланс) </p>\n<p><strong>Фокус</strong>: Выявление клиентов с риском снижения остатка до минимальных значений  </p>\n<p><strong>Метрика</strong>: <strong>WMAE</strong> (Взвешенная средняя абсолютная ошибка)  </p>\n<p>Веса классов при расчёте метрики:</p>\n<table>\n<thead>\n<tr>\n<th>target</th>\n<th>0</th>\n<th>1</th>\n<th>2</th>\n<th>3</th>\n<th>4</th>\n<th>5</th>\n<th>6</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>weight</td>\n<td>1.0</td>\n<td>0.72</td>\n<td>0.52</td>\n<td>0.37</td>\n<td>0.27</td>\n<td>0.19</td>\n<td>0.14</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h4>Ключевые этапы решения</h4>\n<p><strong>1. Генерация признаков</strong> (0.54):</p>\n<ul>\n<li>Обработка временных меток, категорий, финансовых показателей</li>\n<li>Агрегация данных на уровне клиента</li>\n</ul>\n<p><strong>2. Подбор весов классов</strong> (0.51):</p>\n<ul>\n<li>Использование Optuna для поиска оптимальных весов</li>\n<li>Улучшение WMAE за счет фокуса на критически важные классы</li>\n</ul>\n<p><strong>3. SHAP-анализ</strong> (0.5035):</p>\n<ul>\n<li>Выявление ключевых признаков и удаление маловажных</li>\n</ul>\n<p><strong>4. Тюнинг и ансамблирование</strong> (0.49811):</p>\n<ul>\n<li>Обучение CatBoost и LightGBM с подобранными параметрами</li>\n<li>Усреднение предсказаний моделей</li>\n</ul>\n<p><strong>5. Финальное обучение</strong> (Public: 0.49766, Private: 0.49508):</p>\n<ul>\n<li>Обучение ансамбля на всём датасете без валидации</li>\n</ul>\n<h4>Результаты</h4>\n<table>\n<thead>\n<tr>\n<th>Этап улучшения</th>\n<th>Public Score</th>\n<th>Private Score</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Базовый CatBoost с сгенерированными признаками</td>\n<td>0.54</td>\n<td>-</td>\n</tr>\n<tr>\n<td>Подбор class_weights</td>\n<td>0.51</td>\n<td>-</td>\n</tr>\n<tr>\n<td>SHAP + отбор признаков</td>\n<td>0.5035</td>\n<td>-</td>\n</tr>\n<tr>\n<td>Тюнинг + ансамблирование</td>\n<td>0.49811</td>\n<td>0.49576</td>\n</tr>\n<tr>\n<td><strong>Финальный ансамбль</strong></td>\n<td><strong>0.49766</strong></td>\n<td><strong>0.49508</strong></td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h4>Генерация признаков</h4>\n<p>Создано 8 групп признаков из транзакционных данных:</p>\n<h5>1. Базовые финансовые показатели</h5>\n<table>\n<thead>\n<tr>\n<th>Признак</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>num_transactions</code></td>\n<td>Общее количество транзакций</td>\n</tr>\n<tr>\n<td><code>avg_amount</code>, <code>min_amount</code>, <code>max_amount</code></td>\n<td>Средняя/мин/макс сумма транзакции</td>\n</tr>\n<tr>\n<td><code>std_amount</code>, <code>median_amount</code></td>\n<td>Стандартное отклонение и медиана суммы</td>\n</tr>\n<tr>\n<td><code>total_amount</code></td>\n<td>Общая сумма всех транзакций</td>\n</tr>\n<tr>\n<td><code>q25_amount</code>, <code>q75_amount</code></td>\n<td>25-й и 75-й перцентили суммы</td>\n</tr>\n<tr>\n<td><code>transactions_above_&lt;X&gt;</code></td>\n<td>Количество транзакций &gt; X руб (X = 500, 1000, …, 200000)</td>\n</tr>\n</tbody>\n</table>\n<h5>2. Временные паттерны</h5>\n<table>\n<thead>\n<tr>\n<th>Признак</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>weekday_transactions</code></td>\n<td>Транзакции в будние дни</td>\n</tr>\n<tr>\n<td><code>weekend_transactions</code></td>\n<td>Транзакции в выходные дни</td>\n</tr>\n<tr>\n<td><code>morning_transactions</code></td>\n<td>Транзакции утром (6-12)</td>\n</tr>\n<tr>\n<td><code>afternoon_transactions</code></td>\n<td>Транзакции днем (12-18)</td>\n</tr>\n<tr>\n<td><code>evening_transactions</code></td>\n<td>Транзакции вечером (18-24)</td>\n</tr>\n<tr>\n<td><code>night_transactions</code></td>\n<td>Транзакции ночью (0-6)</td>\n</tr>\n<tr>\n<td><code>most_common_hour</code></td>\n<td>Самый частый час транзакции</td>\n</tr>\n<tr>\n<td><code>transaction_hour_std</code></td>\n<td>Стандартное отклонение часа транзакции</td>\n</tr>\n<tr>\n<td><code>weekend_weekday_ratio</code></td>\n<td>Отношение суммы выходных к сумме будних</td>\n</tr>\n<tr>\n<td><code>evening_night_ratio</code></td>\n<td>Отношение количества вечерних транзакций к ночным</td>\n</tr>\n</tbody>\n</table>\n<h5>3. Активность по месяцам</h5>\n<table>\n<thead>\n<tr>\n<th>Признак</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>month_&lt;i&gt;_count</code></td>\n<td>Количество транзакций в месяце i (i=1-12)</td>\n</tr>\n<tr>\n<td><code>month_&lt;i&gt;_sum</code></td>\n<td>Сумма транзакций в месяце i</td>\n</tr>\n<tr>\n<td><code>month_&lt;i&gt;_ratio</code></td>\n<td>Доля транзакций в месяце i</td>\n</tr>\n</tbody>\n</table>\n<h5>4. Категориальные признаки</h5>\n<table>\n<thead>\n<tr>\n<th>Признак</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>unique_mcc</code></td>\n<td>Количество уникальных MCC-кодов</td>\n</tr>\n<tr>\n<td><code>unique_merchants</code></td>\n<td>Количество уникальных мерчантов</td>\n</tr>\n<tr>\n<td><code>most_common_mcc</code></td>\n<td>Самый частый MCC-код</td>\n</tr>\n<tr>\n<td><code>most_common_mcc_freq</code></td>\n<td>Доля транзакций с самым частым MCC-кодом</td>\n</tr>\n<tr>\n<td><code>most_common_merchant</code></td>\n<td>Самый частый мерчант</td>\n</tr>\n<tr>\n<td><code>most_common_merchant_freq</code></td>\n<td>Доля транзакций с самым частым мерчантом</td>\n</tr>\n</tbody>\n</table>\n<h5>5. Поведенческие характеристики</h5>\n<table>\n<thead>\n<tr>\n<th>Признак</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>min_time_diff_seconds</code></td>\n<td>Минимальный интервал между транзакциями (сек)</td>\n</tr>\n<tr>\n<td><code>max_time_diff_seconds</code></td>\n<td>Максимальный интервал между транзакциями (сек)</td>\n</tr>\n<tr>\n<td><code>median_time_diff_seconds</code></td>\n<td>Медианный интервал между транзакциями (сек)</td>\n</tr>\n<tr>\n<td><code>mean_time_diff_seconds</code></td>\n<td>Средний интервал между транзакциями (сек)</td>\n</tr>\n<tr>\n<td><code>recency_days</code></td>\n<td>Дней с последней транзакции до даты среза</td>\n</tr>\n<tr>\n<td><code>activity_duration</code></td>\n<td>Продолжительность активности (дни)</td>\n</tr>\n<tr>\n<td><code>median_transaction_hour</code></td>\n<td>Час медианной транзакции</td>\n</tr>\n<tr>\n<td><code>transaction_frequency</code></td>\n<td>Частота транзакций (транзакций/день)</td>\n</tr>\n</tbody>\n</table>\n<h5>6. Топ MCC (топ-320)</h5>\n<table>\n<thead>\n<tr>\n<th>Признак</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>mcc_&lt;code&gt;_count</code></td>\n<td>Количество транзакций для MCC-кода</td>\n</tr>\n<tr>\n<td><code>mcc_&lt;code&gt;_sum</code></td>\n<td>Сумма транзакций для MCC-кода</td>\n</tr>\n</tbody>\n</table>\n<h5>7. Топ мерчанты (топ-320)</h5>\n<table>\n<thead>\n<tr>\n<th>Признак</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merch_&lt;merchant&gt;_count</code></td>\n<td>Количество транзакций для мерчанта</td>\n</tr>\n<tr>\n<td><code>merch_&lt;merchant&gt;_sum</code></td>\n<td>Сумма транзакций для мерчанта</td>\n</tr>\n</tbody>\n</table>\n<h5>8. Активность в последние периоды</h5>\n<table>\n<thead>\n<tr>\n<th>Признак</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>recent_transactions_&lt;T&gt;</code></td>\n<td>Количество транзакций за последние T дней (T=1,2,3,5,7,14,21,30)</td>\n</tr>\n<tr>\n<td><code>recent_total_amount_&lt;T&gt;</code></td>\n<td>Сумма транзакций за последние T дней</td>\n</tr>\n<tr>\n<td><code>recent_avg_amount_&lt;T&gt;</code></td>\n<td>Средняя сумма транзакции за последние T дней</td>\n</tr>\n<tr>\n<td><code>recent_activity_ratio_&lt;T&gt;</code></td>\n<td>Доля транзакций за последние T дней</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h4>Оптимальные веса классов</h4>\n<p>Подобраны с помощью Optuna для улучшения метрики WMAE:</p>\n<pre><code>class_weights = {\n    : , \n    : , \n    : , \n    : , \n    : , \n    : , \n    : \n}\n</code></pre>",
  "messages": [
    {
      "id": "3246993",
      "postDate": "07/11/2025 23:50:26",
      "content": "<h3>Прогнозирование минимального баланса клиентов банка</h3>\n<p>Оформление задачи находится в alpha-summer.ipynb по ссылке: <a href=\"https://github.com/antis0c1al/Alfa-Summer-Challenge/blob/main/alpha-summer.ipynb\" target=\"_blank\">https://github.com/antis0c1al/Alfa-Summer-Challenge/blob/main/alpha-summer.ipynb</a></p>\n<h4>Описание задачи</h4>\n<p><strong>Цель</strong>: Предсказать, какие клиенты сохранят положительный баланс на своих счетах. Банк заинтересован в поддержании ненулевого остатка, так как обнуление невыгодно.</p>\n<p><strong>Целевая переменная</strong>: Шкала от 0 (баланс обнулён) до 7 (высокий баланс) </p>\n<p><strong>Фокус</strong>: Выявление клиентов с риском снижения остатка до минимальных значений  </p>\n<p><strong>Метрика</strong>: <strong>WMAE</strong> (Взвешенная средняя абсолютная ошибка)  </p>\n<p>Веса классов при расчёте метрики:</p>\n<table>\n<thead>\n<tr>\n<th>target</th>\n<th>0</th>\n<th>1</th>\n<th>2</th>\n<th>3</th>\n<th>4</th>\n<th>5</th>\n<th>6</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>weight</td>\n<td>1.0</td>\n<td>0.72</td>\n<td>0.52</td>\n<td>0.37</td>\n<td>0.27</td>\n<td>0.19</td>\n<td>0.14</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h4>Ключевые этапы решения</h4>\n<p><strong>1. Генерация признаков</strong> (0.54):</p>\n<ul>\n<li>Обработка временных меток, категорий, финансовых показателей</li>\n<li>Агрегация данных на уровне клиента</li>\n</ul>\n<p><strong>2. Подбор весов классов</strong> (0.51):</p>\n<ul>\n<li>Использование Optuna для поиска оптимальных весов</li>\n<li>Улучшение WMAE за счет фокуса на критически важные классы</li>\n</ul>\n<p><strong>3. SHAP-анализ</strong> (0.5035):</p>\n<ul>\n<li>Выявление ключевых признаков и удаление маловажных</li>\n</ul>\n<p><strong>4. Тюнинг и ансамблирование</strong> (0.49811):</p>\n<ul>\n<li>Обучение CatBoost и LightGBM с подобранными параметрами</li>\n<li>Усреднение предсказаний моделей</li>\n</ul>\n<p><strong>5. Финальное обучение</strong> (Public: 0.49766, Private: 0.49508):</p>\n<ul>\n<li>Обучение ансамбля на всём датасете без валидации</li>\n</ul>\n<h4>Результаты</h4>\n<table>\n<thead>\n<tr>\n<th>Этап улучшения</th>\n<th>Public Score</th>\n<th>Private Score</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Базовый CatBoost с сгенерированными признаками</td>\n<td>0.54</td>\n<td>-</td>\n</tr>\n<tr>\n<td>Подбор class_weights</td>\n<td>0.51</td>\n<td>-</td>\n</tr>\n<tr>\n<td>SHAP + отбор признаков</td>\n<td>0.5035</td>\n<td>-</td>\n</tr>\n<tr>\n<td>Тюнинг + ансамблирование</td>\n<td>0.49811</td>\n<td>0.49576</td>\n</tr>\n<tr>\n<td><strong>Финальный ансамбль</strong></td>\n<td><strong>0.49766</strong></td>\n<td><strong>0.49508</strong></td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h4>Генерация признаков</h4>\n<p>Создано 8 групп признаков из транзакционных данных:</p>\n<h5>1. Базовые финансовые показатели</h5>\n<table>\n<thead>\n<tr>\n<th>Признак</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>num_transactions</code></td>\n<td>Общее количество транзакций</td>\n</tr>\n<tr>\n<td><code>avg_amount</code>, <code>min_amount</code>, <code>max_amount</code></td>\n<td>Средняя/мин/макс сумма транзакции</td>\n</tr>\n<tr>\n<td><code>std_amount</code>, <code>median_amount</code></td>\n<td>Стандартное отклонение и медиана суммы</td>\n</tr>\n<tr>\n<td><code>total_amount</code></td>\n<td>Общая сумма всех транзакций</td>\n</tr>\n<tr>\n<td><code>q25_amount</code>, <code>q75_amount</code></td>\n<td>25-й и 75-й перцентили суммы</td>\n</tr>\n<tr>\n<td><code>transactions_above_&lt;X&gt;</code></td>\n<td>Количество транзакций &gt; X руб (X = 500, 1000, …, 200000)</td>\n</tr>\n</tbody>\n</table>\n<h5>2. Временные паттерны</h5>\n<table>\n<thead>\n<tr>\n<th>Признак</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>weekday_transactions</code></td>\n<td>Транзакции в будние дни</td>\n</tr>\n<tr>\n<td><code>weekend_transactions</code></td>\n<td>Транзакции в выходные дни</td>\n</tr>\n<tr>\n<td><code>morning_transactions</code></td>\n<td>Транзакции утром (6-12)</td>\n</tr>\n<tr>\n<td><code>afternoon_transactions</code></td>\n<td>Транзакции днем (12-18)</td>\n</tr>\n<tr>\n<td><code>evening_transactions</code></td>\n<td>Транзакции вечером (18-24)</td>\n</tr>\n<tr>\n<td><code>night_transactions</code></td>\n<td>Транзакции ночью (0-6)</td>\n</tr>\n<tr>\n<td><code>most_common_hour</code></td>\n<td>Самый частый час транзакции</td>\n</tr>\n<tr>\n<td><code>transaction_hour_std</code></td>\n<td>Стандартное отклонение часа транзакции</td>\n</tr>\n<tr>\n<td><code>weekend_weekday_ratio</code></td>\n<td>Отношение суммы выходных к сумме будних</td>\n</tr>\n<tr>\n<td><code>evening_night_ratio</code></td>\n<td>Отношение количества вечерних транзакций к ночным</td>\n</tr>\n</tbody>\n</table>\n<h5>3. Активность по месяцам</h5>\n<table>\n<thead>\n<tr>\n<th>Признак</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>month_&lt;i&gt;_count</code></td>\n<td>Количество транзакций в месяце i (i=1-12)</td>\n</tr>\n<tr>\n<td><code>month_&lt;i&gt;_sum</code></td>\n<td>Сумма транзакций в месяце i</td>\n</tr>\n<tr>\n<td><code>month_&lt;i&gt;_ratio</code></td>\n<td>Доля транзакций в месяце i</td>\n</tr>\n</tbody>\n</table>\n<h5>4. Категориальные признаки</h5>\n<table>\n<thead>\n<tr>\n<th>Признак</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>unique_mcc</code></td>\n<td>Количество уникальных MCC-кодов</td>\n</tr>\n<tr>\n<td><code>unique_merchants</code></td>\n<td>Количество уникальных мерчантов</td>\n</tr>\n<tr>\n<td><code>most_common_mcc</code></td>\n<td>Самый частый MCC-код</td>\n</tr>\n<tr>\n<td><code>most_common_mcc_freq</code></td>\n<td>Доля транзакций с самым частым MCC-кодом</td>\n</tr>\n<tr>\n<td><code>most_common_merchant</code></td>\n<td>Самый частый мерчант</td>\n</tr>\n<tr>\n<td><code>most_common_merchant_freq</code></td>\n<td>Доля транзакций с самым частым мерчантом</td>\n</tr>\n</tbody>\n</table>\n<h5>5. Поведенческие характеристики</h5>\n<table>\n<thead>\n<tr>\n<th>Признак</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>min_time_diff_seconds</code></td>\n<td>Минимальный интервал между транзакциями (сек)</td>\n</tr>\n<tr>\n<td><code>max_time_diff_seconds</code></td>\n<td>Максимальный интервал между транзакциями (сек)</td>\n</tr>\n<tr>\n<td><code>median_time_diff_seconds</code></td>\n<td>Медианный интервал между транзакциями (сек)</td>\n</tr>\n<tr>\n<td><code>mean_time_diff_seconds</code></td>\n<td>Средний интервал между транзакциями (сек)</td>\n</tr>\n<tr>\n<td><code>recency_days</code></td>\n<td>Дней с последней транзакции до даты среза</td>\n</tr>\n<tr>\n<td><code>activity_duration</code></td>\n<td>Продолжительность активности (дни)</td>\n</tr>\n<tr>\n<td><code>median_transaction_hour</code></td>\n<td>Час медианной транзакции</td>\n</tr>\n<tr>\n<td><code>transaction_frequency</code></td>\n<td>Частота транзакций (транзакций/день)</td>\n</tr>\n</tbody>\n</table>\n<h5>6. Топ MCC (топ-320)</h5>\n<table>\n<thead>\n<tr>\n<th>Признак</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>mcc_&lt;code&gt;_count</code></td>\n<td>Количество транзакций для MCC-кода</td>\n</tr>\n<tr>\n<td><code>mcc_&lt;code&gt;_sum</code></td>\n<td>Сумма транзакций для MCC-кода</td>\n</tr>\n</tbody>\n</table>\n<h5>7. Топ мерчанты (топ-320)</h5>\n<table>\n<thead>\n<tr>\n<th>Признак</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>merch_&lt;merchant&gt;_count</code></td>\n<td>Количество транзакций для мерчанта</td>\n</tr>\n<tr>\n<td><code>merch_&lt;merchant&gt;_sum</code></td>\n<td>Сумма транзакций для мерчанта</td>\n</tr>\n</tbody>\n</table>\n<h5>8. Активность в последние периоды</h5>\n<table>\n<thead>\n<tr>\n<th>Признак</th>\n<th>Описание</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>recent_transactions_&lt;T&gt;</code></td>\n<td>Количество транзакций за последние T дней (T=1,2,3,5,7,14,21,30)</td>\n</tr>\n<tr>\n<td><code>recent_total_amount_&lt;T&gt;</code></td>\n<td>Сумма транзакций за последние T дней</td>\n</tr>\n<tr>\n<td><code>recent_avg_amount_&lt;T&gt;</code></td>\n<td>Средняя сумма транзакции за последние T дней</td>\n</tr>\n<tr>\n<td><code>recent_activity_ratio_&lt;T&gt;</code></td>\n<td>Доля транзакций за последние T дней</td>\n</tr>\n</tbody>\n</table>\n<hr>\n<h4>Оптимальные веса классов</h4>\n<p>Подобраны с помощью Optuna для улучшения метрики WMAE:</p>\n<pre><code>class_weights = {\n    : , \n    : , \n    : , \n    : , \n    : , \n    : , \n    : \n}\n</code></pre>",
      "rawMarkdown": "### Прогнозирование минимального баланса клиентов банка\n\nОформление задачи находится в alpha-summer.ipynb по ссылке: https://github.com/antis0c1al/Alfa-Summer-Challenge/blob/main/alpha-summer.ipynb\n\n#### Описание задачи\n**Цель**: Предсказать, какие клиенты сохранят положительный баланс на своих счетах. Банк заинтересован в поддержании ненулевого остатка, так как обнуление невыгодно.\n\n**Целевая переменная**: Шкала от 0 (баланс обнулён) до 7 (высокий баланс) \n\n**Фокус**: Выявление клиентов с риском снижения остатка до минимальных значений  \n\n**Метрика**: **WMAE** (Взвешенная средняя абсолютная ошибка)  \n\nВеса классов при расчёте метрики:\n\n| target | 0    | 1    | 2    | 3    | 4    | 5    | 6    |\n|--------|------|------|------|------|------|------|------|\n| weight | 1.0  | 0.72 | 0.52 | 0.37 | 0.27 | 0.19 | 0.14 |\n\n---\n\n#### Ключевые этапы решения\n**1. Генерация признаков** (0.54):\n- Обработка временных меток, категорий, финансовых показателей\n- Агрегация данных на уровне клиента\n\n**2. Подбор весов классов** (0.51):\n- Использование Optuna для поиска оптимальных весов\n- Улучшение WMAE за счет фокуса на критически важные классы\n\n**3. SHAP-анализ** (0.5035):\n- Выявление ключевых признаков и удаление маловажных\n\n**4. Тюнинг и ансамблирование** (0.49811):\n- Обучение CatBoost и LightGBM с подобранными параметрами\n- Усреднение предсказаний моделей\n\n**5. Финальное обучение** (Public: 0.49766, Private: 0.49508):\n- Обучение ансамбля на всём датасете без валидации\n\n\n\n#### Результаты\n| Этап улучшения             | Public Score | Private Score |\n|----------------------------|--------------|---------------|\n| Базовый CatBoost с сгенерированными признаками          | 0.54         | -             |\n| Подбор class_weights       | 0.51         | -             |\n| SHAP + отбор признаков     | 0.5035       | -             |\n| Тюнинг + ансамблирование  | 0.49811      | 0.49576            |\n| **Финальный ансамбль**     | **0.49766**  | **0.49508**   |\n\n---\n\n#### Генерация признаков\nСоздано 8 групп признаков из транзакционных данных:\n\n##### 1. Базовые финансовые показатели\n| Признак                     | Описание |\n|-----------------------------|----------|\n| `num_transactions`          | Общее количество транзакций |\n| `avg_amount`, `min_amount`, `max_amount` | Средняя/мин/макс сумма транзакции |\n| `std_amount`, `median_amount` | Стандартное отклонение и медиана суммы |\n| `total_amount`              | Общая сумма всех транзакций |\n| `q25_amount`, `q75_amount`  | 25-й и 75-й перцентили суммы |\n| `transactions_above_<X>`    | Количество транзакций > X руб (X = 500, 1000, ..., 200000) |\n\n##### 2. Временные паттерны\n| Признак                          | Описание |\n|----------------------------------|----------|\n| `weekday_transactions`           | Транзакции в будние дни |\n| `weekend_transactions`           | Транзакции в выходные дни |\n| `morning_transactions`           | Транзакции утром (6-12) |\n| `afternoon_transactions`         | Транзакции днем (12-18) |\n| `evening_transactions`           | Транзакции вечером (18-24) |\n| `night_transactions`             | Транзакции ночью (0-6) |\n| `most_common_hour`               | Самый частый час транзакции |\n| `transaction_hour_std`           | Стандартное отклонение часа транзакции |\n| `weekend_weekday_ratio`          | Отношение суммы выходных к сумме будних |\n| `evening_night_ratio`            | Отношение количества вечерних транзакций к ночным |\n\n##### 3. Активность по месяцам\n| Признак               | Описание |\n|-----------------------|----------|\n| `month_<i>_count`     | Количество транзакций в месяце i (i=1-12) |\n| `month_<i>_sum`       | Сумма транзакций в месяце i |\n| `month_<i>_ratio`     | Доля транзакций в месяце i |\n\n##### 4. Категориальные признаки\n| Признак                          | Описание |\n|----------------------------------|----------|\n| `unique_mcc`                     | Количество уникальных MCC-кодов |\n| `unique_merchants`               | Количество уникальных мерчантов |\n| `most_common_mcc`                | Самый частый MCC-код |\n| `most_common_mcc_freq`           | Доля транзакций с самым частым MCC-кодом |\n| `most_common_merchant`           | Самый частый мерчант |\n| `most_common_merchant_freq`      | Доля транзакций с самым частым мерчантом |\n\n##### 5. Поведенческие характеристики\n| Признак                       | Описание |\n|-------------------------------|----------|\n| `min_time_diff_seconds`       | Минимальный интервал между транзакциями (сек) |\n| `max_time_diff_seconds`       | Максимальный интервал между транзакциями (сек) |\n| `median_time_diff_seconds`    | Медианный интервал между транзакциями (сек) |\n| `mean_time_diff_seconds`      | Средний интервал между транзакциями (сек) |\n| `recency_days`                | Дней с последней транзакции до даты среза |\n| `activity_duration`           | Продолжительность активности (дни) |\n| `median_transaction_hour`     | Час медианной транзакции |\n| `transaction_frequency`       | Частота транзакций (транзакций/день) |\n\n##### 6. Топ MCC (топ-320)\n| Признак               | Описание |\n|-----------------------|----------|\n| `mcc_<code>_count`    | Количество транзакций для MCC-кода |\n| `mcc_<code>_sum`      | Сумма транзакций для MCC-кода |\n\n##### 7. Топ мерчанты (топ-320)\n| Признак                  | Описание |\n|--------------------------|----------|\n| `merch_<merchant>_count` | Количество транзакций для мерчанта |\n| `merch_<merchant>_sum`   | Сумма транзакций для мерчанта |\n\n##### 8. Активность в последние периоды\n| Признак                             | Описание |\n|-------------------------------------|----------|\n| `recent_transactions_<T>`           | Количество транзакций за последние T дней (T=1,2,3,5,7,14,21,30) |\n| `recent_total_amount_<T>`           | Сумма транзакций за последние T дней |\n| `recent_avg_amount_<T>`             | Средняя сумма транзакции за последние T дней |\n| `recent_activity_ratio_<T>`         | Доля транзакций за последние T дней |\n\n---\n\n#### Оптимальные веса классов\nПодобраны с помощью Optuna для улучшения метрики WMAE:\n```python\nclass_weights = {\n    0: 0.7900, \n    1: 0.9220, \n    2: 0.9820, \n    3: 0.6070, \n    4: 0.3870, \n    5: 0.2190, \n    6: 0.1540\n}\n```",
      "votes": null
    },
    {
      "id": "3247275",
      "postDate": "07/12/2025 12:55:40",
      "content": "<p>А сколько 6 получилось в предикте?</p>",
      "rawMarkdown": "А сколько 6 получилось в предикте?",
      "votes": null
    },
    {
      "id": "3247360",
      "postDate": "07/12/2025 15:44:35",
      "content": "<p>Ответов со значением больше 5.5 получилось 148; ровно 6.0000 (все модели ансамбля должны были предсказать 6) получилось 97.</p>",
      "rawMarkdown": "Ответов со значением больше 5.5 получилось 148; ровно 6.0000 (все модели ансамбля должны были предсказать 6) получилось 97.",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 3247275,
      "author_name": "sergeyqt2024",
      "author_url": "",
      "post_date": "07/12/2025 12:55:40",
      "content": "<p>А сколько 6 получилось в предикте?</p>",
      "votes": null,
      "replies": [
        {
          "id": 3247360,
          "author_name": "sasgrisha",
          "author_url": "",
          "post_date": "07/12/2025 15:44:35",
          "content": "<p>Ответов со значением больше 5.5 получилось 148; ровно 6.0000 (все модели ансамбля должны были предсказать 6) получилось 97.</p>",
          "votes": null,
          "replies": []
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "3246993": "### Прогнозирование минимального баланса клиентов банка\n\nОформление задачи находится в alpha-summer.ipynb по ссылке: https://github.com/antis0c1al/Alfa-Summer-Challenge/blob/main/alpha-summer.ipynb\n\n#### Описание задачи\n**Цель**: Предсказать, какие клиенты сохранят положительный баланс на своих счетах. Банк заинтересован в поддержании ненулевого остатка, так как обнуление невыгодно.\n\n**Целевая переменная**: Шкала от 0 (баланс обнулён) до 7 (высокий баланс) \n\n**Фокус**: Выявление клиентов с риском снижения остатка до минимальных значений  \n\n**Метрика**: **WMAE** (Взвешенная средняя абсолютная ошибка)  \n\nВеса классов при расчёте метрики:\n\n| target | 0    | 1    | 2    | 3    | 4    | 5    | 6    |\n|--------|------|------|------|------|------|------|------|\n| weight | 1.0  | 0.72 | 0.52 | 0.37 | 0.27 | 0.19 | 0.14 |\n\n---\n\n#### Ключевые этапы решения\n**1. Генерация признаков** (0.54):\n- Обработка временных меток, категорий, финансовых показателей\n- Агрегация данных на уровне клиента\n\n**2. Подбор весов классов** (0.51):\n- Использование Optuna для поиска оптимальных весов\n- Улучшение WMAE за счет фокуса на критически важные классы\n\n**3. SHAP-анализ** (0.5035):\n- Выявление ключевых признаков и удаление маловажных\n\n**4. Тюнинг и ансамблирование** (0.49811):\n- Обучение CatBoost и LightGBM с подобранными параметрами\n- Усреднение предсказаний моделей\n\n**5. Финальное обучение** (Public: 0.49766, Private: 0.49508):\n- Обучение ансамбля на всём датасете без валидации\n\n\n\n#### Результаты\n| Этап улучшения             | Public Score | Private Score |\n|----------------------------|--------------|---------------|\n| Базовый CatBoost с сгенерированными признаками          | 0.54         | -             |\n| Подбор class_weights       | 0.51         | -             |\n| SHAP + отбор признаков     | 0.5035       | -             |\n| Тюнинг + ансамблирование  | 0.49811      | 0.49576            |\n| **Финальный ансамбль**     | **0.49766**  | **0.49508**   |\n\n---\n\n#### Генерация признаков\nСоздано 8 групп признаков из транзакционных данных:\n\n##### 1. Базовые финансовые показатели\n| Признак                     | Описание |\n|-----------------------------|----------|\n| `num_transactions`          | Общее количество транзакций |\n| `avg_amount`, `min_amount`, `max_amount` | Средняя/мин/макс сумма транзакции |\n| `std_amount`, `median_amount` | Стандартное отклонение и медиана суммы |\n| `total_amount`              | Общая сумма всех транзакций |\n| `q25_amount`, `q75_amount`  | 25-й и 75-й перцентили суммы |\n| `transactions_above_<X>`    | Количество транзакций > X руб (X = 500, 1000, ..., 200000) |\n\n##### 2. Временные паттерны\n| Признак                          | Описание |\n|----------------------------------|----------|\n| `weekday_transactions`           | Транзакции в будние дни |\n| `weekend_transactions`           | Транзакции в выходные дни |\n| `morning_transactions`           | Транзакции утром (6-12) |\n| `afternoon_transactions`         | Транзакции днем (12-18) |\n| `evening_transactions`           | Транзакции вечером (18-24) |\n| `night_transactions`             | Транзакции ночью (0-6) |\n| `most_common_hour`               | Самый частый час транзакции |\n| `transaction_hour_std`           | Стандартное отклонение часа транзакции |\n| `weekend_weekday_ratio`          | Отношение суммы выходных к сумме будних |\n| `evening_night_ratio`            | Отношение количества вечерних транзакций к ночным |\n\n##### 3. Активность по месяцам\n| Признак               | Описание |\n|-----------------------|----------|\n| `month_<i>_count`     | Количество транзакций в месяце i (i=1-12) |\n| `month_<i>_sum`       | Сумма транзакций в месяце i |\n| `month_<i>_ratio`     | Доля транзакций в месяце i |\n\n##### 4. Категориальные признаки\n| Признак                          | Описание |\n|----------------------------------|----------|\n| `unique_mcc`                     | Количество уникальных MCC-кодов |\n| `unique_merchants`               | Количество уникальных мерчантов |\n| `most_common_mcc`                | Самый частый MCC-код |\n| `most_common_mcc_freq`           | Доля транзакций с самым частым MCC-кодом |\n| `most_common_merchant`           | Самый частый мерчант |\n| `most_common_merchant_freq`      | Доля транзакций с самым частым мерчантом |\n\n##### 5. Поведенческие характеристики\n| Признак                       | Описание |\n|-------------------------------|----------|\n| `min_time_diff_seconds`       | Минимальный интервал между транзакциями (сек) |\n| `max_time_diff_seconds`       | Максимальный интервал между транзакциями (сек) |\n| `median_time_diff_seconds`    | Медианный интервал между транзакциями (сек) |\n| `mean_time_diff_seconds`      | Средний интервал между транзакциями (сек) |\n| `recency_days`                | Дней с последней транзакции до даты среза |\n| `activity_duration`           | Продолжительность активности (дни) |\n| `median_transaction_hour`     | Час медианной транзакции |\n| `transaction_frequency`       | Частота транзакций (транзакций/день) |\n\n##### 6. Топ MCC (топ-320)\n| Признак               | Описание |\n|-----------------------|----------|\n| `mcc_<code>_count`    | Количество транзакций для MCC-кода |\n| `mcc_<code>_sum`      | Сумма транзакций для MCC-кода |\n\n##### 7. Топ мерчанты (топ-320)\n| Признак                  | Описание |\n|--------------------------|----------|\n| `merch_<merchant>_count` | Количество транзакций для мерчанта |\n| `merch_<merchant>_sum`   | Сумма транзакций для мерчанта |\n\n##### 8. Активность в последние периоды\n| Признак                             | Описание |\n|-------------------------------------|----------|\n| `recent_transactions_<T>`           | Количество транзакций за последние T дней (T=1,2,3,5,7,14,21,30) |\n| `recent_total_amount_<T>`           | Сумма транзакций за последние T дней |\n| `recent_avg_amount_<T>`             | Средняя сумма транзакции за последние T дней |\n| `recent_activity_ratio_<T>`         | Доля транзакций за последние T дней |\n\n---\n\n#### Оптимальные веса классов\nПодобраны с помощью Optuna для улучшения метрики WMAE:\n```python\nclass_weights = {\n    0: 0.7900, \n    1: 0.9220, \n    2: 0.9820, \n    3: 0.6070, \n    4: 0.3870, \n    5: 0.2190, \n    6: 0.1540\n}\n```",
    "3247275": "А сколько 6 получилось в предикте?",
    "3247360": "Ответов со значением больше 5.5 получилось 148; ровно 6.0000 (все модели ансамбля должны были предсказать 6) получилось 97."
  },
  "source": "meta"
}