LinkedIn профиль и GitHub профиль

Вы когда-нибудь задумывались, почему некоторые из ваших прогнозов модели машинного обучения неверны, несмотря на высокую точность других показателей производительности?

Получение хорошей точности похоже на выигрыш в подбрасывании монеты перед матчем. Это хорошо, но работы еще много.

Как правило, когда вы получаете низкие оценки точности, вы пытаетесь настроить гиперпараметры модели и посмотреть, поможет ли это повысить точность. Здесь мы больше сосредоточимся на подходах, основанных на данных.

В этой статье мы сосредоточимся на анализе ошибок, допущенных вашей моделью машинного обучения, и выясним, что не так с данными. Затем внесите некоторые изменения в данные и переобучите модель.

Ниже приведены разделы, которые мы будем проходить:

  1. Введение и обзор проблемы
  2. Обзор данных
  3. Сопоставление реальной проблемы с проблемой машинного обучения
  4. ЭДА
  5. Разработка функций
  6. Моделирование машинного обучения
  7. Анализ ошибок, допущенных вашей моделью

1. Введение и обзор проблемы

1.1. Обзор

Мы будем использовать задачу Santander Customer Transaction Prediction от Kaggle.

Santander — это банк в Испании, но с 2013 года он обслуживает клиентов на северо-востоке, имея филиалы и более 2000 банкоматов на северо-востоке и во Флориде.

Сантандер организовал 4 конкурса Kaggle в прошлом, последним из которых в 2019 году стал «Прогнозирование транзакций клиентов Сантандера». Целью конкурса является определение того, какие клиенты совершат конкретную транзакцию в будущем, независимо от суммы транзакции.

1.2. ML формулировка

Наша задача здесь состоит в том, чтобы классифицировать, совершит ли клиент транзакцию в будущем.

1.3. Ограничения бизнеса

  • Ограничения по задержке не упоминаются
  • Мы предполагаем, что интерпретируемость не важна, поскольку она не указана в качестве ограничения на странице представления Kaggle.

2. Обзор данных

Вам предоставляется анонимный набор данных, содержащий 200 числовых переменных признаков, двоичный столбец target и столбец ID_code строк.

Описания файлов

  • train.csv — обучающая выборка.
  • test.csv — тестовый набор. Набор тестов содержит несколько строк, которые не учитываются при подсчете баллов.

Ссылка на набор данных: https://www.kaggle.com/c/santander-customer-transaction-prediction/data

3. Сопоставление реальной проблемы с проблемой машинного обучения

3.1. Тип задачи машинного обучения

Это проблема бинарной классификации.

3.2. Метрики оценки

В соответствии с правилами этого соревнования Kaggle мы будем использовать площадь под ROC-кривой между прогнозируемой вероятностью и наблюдаемой целью.

4. Исследовательский анализ данных

Я только что добавил сюда необходимые фрагменты кода. Вы сможете найти ссылку на мой репозиторий GitHub для подробной реализации кода.

4.1. Базовый анализ набора данных

4.1.1. Сначала давайте импортируем все необходимые библиотеки

4.1.2. Чтение обучающих и тестовых CSV-файлов

4.1.3. Проверка дубликатов в обучающих и тестовых наборах данных

4.1.4. Проверка нулевых значений в обучающих и тестовых наборах данных

4.1.5. Обучайте и тестируйте наблюдения за данными:

  • Данные поезда содержат форму 200k*202.
  • Тестовые данные содержат 200k*201 форму. Цель - это отсутствующий столбец здесь
  • Как в данных Train, так и в Test нет «дубликатов и пропущенных значений».

4.2. Одномерный анализ

4.2.1. Распределение целей в данных поезда

4.2.2. Графики распределения всех 200 функций, разделенных по целям

4.2.3. Наблюдения за одномерным анализом

  • Цель явно несбалансирована, ~10% клиентов совершают транзакцию, остальные нет
  • Если мы посмотрим на графики распределения, большинство из них перекрываются между обоими классами, есть несколько функций, таких как var0, var2, var6, var9 и т. д., где есть разница, которая может быть одной из наших важных функций для разделения классов.

4.3. Многомерный анализ

4.3.1. Корреляция между функциями

4.3.2. Наблюдения многомерного анализа

  • Ни одна из функций (X) не коррелирует друг с другом, поэтому данные поезда будут смоделированы.

4.4. Наборы Train и Test относятся к одному и тому же дистрибутиву?

Для этого мы будем использовать псевдоцели 1 для набора поездов и 0 для набора тестов, а затем использовать логистическую регрессию для разделения псевдоцелей, если мы получим хороший показатель AUC, тогда наши распределения поездов и тестов будут разными, иначе они будут одинаковыми.

5. Разработка функций

Я поиграл с парой функций, пытаясь создать новые. Я только что добавил сюда необходимые фрагменты кода. Вы сможете найти ссылку на мой репозиторий GitHub для подробной реализации кода для разработки функций.

5.1. Частотное кодирование числовых признаков

Мы добавим 200 новых функций с частотным кодированием к существующим 200 функциям. Таким образом, общее количество функций, которые мы будем использовать для обучения, составляет 400.

Кредиты: https://www.kaggle.com/cdeotte/200-magical-models-santander-0-920

6. Моделирование машинного обучения

Все эксперименты с моделями можно найти в моем репозитории GitHub. Здесь я продемонстрирую лучшие результаты моделирования для нашей задачи бинарной классификации.

6.1. ЛГБМ-модель

Используя вышеуказанную отправку на Kaggle, мне удалось получить показатель AUC 0,90383, что входит в 10 % лучших отправок.

7. Анализ ошибок, допущенных вашей моделью

В этом разделе мы рассмотрим ошибки, допущенные моделью, и попытаемся выяснить, почему была допущена ошибка, и есть ли способ, мы можем ее исправить. получая информацию с помощью EDA.

7.1. Импорт необходимых библиотек

7.2. Чтение csv с прогнозами LGBM

7.3. Распределение вероятностей прогнозов

Наблюдения: глядя на приведенный ниже график, мы можем поиграть с порогом и вместо использования 0,5 для определения класса 0 или 1 мы можем использовать 0,4, поскольку мы видим, что класс 0 (синий) падает экспоненциально. через ~0,4.

7.4. Матрица путаницы

Наблюдения. Поскольку набор данных несбалансирован, мы видим, что класс 1 (клиенты, совершающие транзакцию), составляющий меньшинство, не показал хороших результатов. Нужно смотреть на «Ложноотрицательные результаты».

7.5. Самый неправильно классифицированный класс

Наблюдения. Как мы видим выше, класс 1 является классом, классифицированным чаще всего — одна из причин заключается в низких значениях обучающих данных для класса 1.

7.6. Глубокое погружение в класс 1

Здесь мы пытаемся найти закономерность в неправильно классифицированных классах 1 и посмотреть, сможем ли мы исправить данные, чтобы модель работала лучше.

Наблюдения: Как мы видим выше, более 50% класса 1 классифицированы неправильно.

7.7. Использование методов уменьшения размерности

Здесь мы используем сначала PCA, чтобы объяснить дисперсию ~95%, поскольку существует 400 признаков, и их уменьшение с помощью T-SNE будет медленным, а затем мы используем T-SNE для дальнейшего уменьшения до двух измерений. strong> и визуализируйте.

Наблюдения. К сожалению, этот обучающий набор данных настолько хорошо разработан до того, как он был размещен на Kaggle, что ошибочные классификации распределяются равномерно, не показывая особой закономерности.

7.8. Являются ли «правильно классифицированные баллы класса 1» и «неправильно классифицированные баллы класса 1» одним и тем же распределением?

В этом разделе мы будем добавлять псевдоцели к «правильно классифицированным точкам класса 1» и «неверно классифицированным точкам класса 1», прогоним их через логистическую регрессию и проверим, имеют ли они одинаковое распределение или нет.

Наблюдения. Поскольку мы получаем показатель AUC, равный 0,75, распределение "правильно классифицированных баллов класса 1" и "неправильных классифицированных баллов класса 1" неодинаково — это важный момент. наблюдения, поскольку это говорит нам, почему модель неправильно классифицирует класс 1.

7.9. Получите «первые n» функций для дальнейшего анализа

В этом разделе мы будем использовать XGboost, чтобы помочь нам с 15 основными функциями, которые мы можем использовать для дальнейшего анализа.

7.10. Построение графиков распределения

В этом разделе мы построим графики распределения для 15 основных признаков, полученных выше, для «класса 0» и «неверно классифицированных баллов класса 1».

Наблюдения. Как мы видим ниже, распределения «неверно классифицированных классов 1» и «классов 0» в основном одинаковы, и, следовательно, модель ошибочно классифицирует класс 1 как класс 0 для некоторых точек данных — Это важное наблюдение.

Заключительные наблюдения

Используя базовую статистику и некоторую визуализацию, мы можем прийти к следующему выводу:

  • Используя уменьшение размерности PCA и T-SNE, мы можем прийти к выводу, что неправильно классифицированный и правильно классифицированный класс 1 не показывает никаких шаблонов и распределен равномерно, поэтому для неправильно классифицированных точек класса 1 не обнаружено никаких выбросов.
  • При более глубоком рассмотрении распределения 15 лучших функций мы видим, что неправильно классифицированные точки класса 1 очень похожи на распределение класса 0 и, следовательно, на неправильную классификацию. Чтобы исправить это, нам нужно посмотреть на неправильно классифицированные точки или удалить их из набора данных, а затем проверить, улучшаются ли оценки — С удалением стратегии точек данных мы должны быть осторожны, чтобы не переобучить обучение. данные . В качестве альтернативы мы можем проверить, не верны ли метки классов истинности для этих неправильно классифицированных точек и есть ли ошибка, когда они были помечены.

использованная литература

  1. https://www.kaggle.com/gpreda/santander-eda-and-prediction
  2. https://www.kaggle.com/cdeotte/200-magical-models-santander-0-920

Ссылки на профиль

GitHub: https://github.com/ankitshah-dev/Analyzing-machine-learning-model-errors

LinkedIn: www.linkedin.com/in/ankitshah91