Содержание:

1. Бизнес-проблема

2. Формулировка машинного обучения

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

4. Показатели оценки

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

6. Предварительная обработка

7.Излишняя выборка

8. Экспериментальные модели

9.Окончательный прогноз

10.Результат Kaggle

11.Локальное развертывание

12. Анализ частоты ошибок

13.Наблюдение

14. Будущая работа

15.Ссылка на код Github

16. Ссылка LinkedIn

17.Ссылки

1.БИЗНЕС-ПРОБЛЕМА:

Моя деловая проблема будет передана в банк Сантандер. Эта проблема взята из конкурса kaggle, проведенного в 2016 году. В банковском секторе удовлетворенность клиентов (клиентов) является наиболее важной. Таким образом, мы должны обеспечить удовлетворение клиентов в банковском бизнесе. В противном случае они уходят из банка, и это сказывается на нашем бизнесе.

Согласно отчетам за 2020 год, у Santander Bank 148 миллионов клиентов. Невозможно вручную проверить эти 148 миллионов клиентов (если это возможно, нам нужно потратить большую сумму).

Таким образом, santander bank просит kagglers помочь им выявить неудовлетворенных клиентов как можно раньше, после чего руководство позаботится об этих клиентах (клиентах), предоставив их требования, такие как улучшение существующих планов или улучшение банковских услуг, политик или информирование их о существующие или полезные планы …..и т.д. Руководство пытается помешать им покинуть банк.

2.ML СОСТАВ:

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

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

Эта проблема представляет собой задачу бинарной классификации с меткой Target. Здесь целевая метка — это зависимая переменная (функция), которая нам нужна для прогнозирования столбца TARGET на основе независимых переменных (функций). Целевая метка, обозначающая неудовлетворенных клиентов с 1 и довольных клиентов с 0.

3.НАБОР ДАННЫХ_ОБЗОР:

Набор данных содержит 3 файла: train.csv, test.csv, sample_submission.csv.

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

  • train.csv — обучающий набор, включающий цель
  • test.csv — набор тестов без цели.
  • sample_submission.csv — образец файла отправки в правильном формате.

Данные можно скачать здесь. В этом соревновании вы будете работать с сотнями анонимных функций, чтобы предсказать, удовлетворен ли клиент (0) или неудовлетворен (1) своим банковским опытом или существующей информацией о клиенте.

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

4.EVALUATION_METRICS:

Метрики оценки используются для измерения нашей модели, насколько она хороша?

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

Кривая ROC (рабочая характеристика приемника) представляет собой кривую вероятности AUC (площадь под кривой ROC) представляет собой степень меры разделимости. Он говорит, насколько модель способна различать классы.

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

● Если значение AUC составляет около 0,5, это означает, что модель не имеет возможности разделения классов, такая модель является случайной моделью.

● Если значение AUC ближе к 0, что означает, что он имеет наихудшую меру разделимости (это возвращает результат 1 как 0 и 0 как 1), такая модель называется плохой моделью.

Точность:

  1. Точность Мы не должны использовать точность в качестве показателя несбалансированного набора данных.
  2. В случае, если мы используем точность в качестве метрики, легко получить высокий балл, просто классифицируя все наблюдения как класс большинства.
  3. Точность измеряет, сколько наблюдений правильно классифицировано, независимо от класса/метки.
  4. Если ваша проблема сбалансирована и вас интересуют как положительные, так и отрицательные прогнозы, то точность — хороший выбор, потому что она действительно проста и легко интерпретируется.

Оценка F1:

  1. Показатель F1 представляет собой гармоническое среднее значение точности и отзыва, и они рассчитываются для предсказанных классов/меток, а не для оценок предсказания.
  2. Если мы используем показатель f1 в качестве метрики, нам нужно найти оптимизированное пороговое значение. на основе порогового значения сильно изменился счет f1
  3. Оценка F1 уравновешивает точность и отзыв в положительном классе

ППК:

  1. Кривая AUC-ROC представляет собой область под кривой рабочих характеристик приемника. AUC-Roc — это измерение производительности для задачи классификации при различных пороговых значениях.
  2. ROC - это кривая вероятности, а AUC представляет собой степень меры разделимости и говорит, насколько модель способна различать классы.
  3. AUC особенно хорош при ранжировании прогнозов. Из-за этого, если у вас есть проблема, когда сортировка ваших наблюдений — это то, что вас волнует, AUC, вероятно, то, что вы ищете.
  4. Если вы заботитесь о ранжировании прогнозов, не нуждаетесь в том, чтобы они были должным образом откалиброваны вероятностями, и ваш набор данных не сильно несбалансирован, тогда я бы выбрал AUC.
  5. Итак, если вы заботитесь о ранжировании прогнозов, не нуждаетесь в том, чтобы они были должным образом откалиброваны вероятностями, и ваш набор данных не сильно несбалансирован, тогда я бы выбрал AUC.
  6. Итак, здесь мы концентрируемся на обоих классах. поэтому здесь нам нужно рассмотреть прогнозы ранжирования, и они сильно несбалансированы, поэтому с помощью методов SMOTE, ADA SYN балансируют набор данных.

5. АНАЛИЗ ИССЛЕДОВАТЕЛЬСКИХ ДАННЫХ:

В машинном обучении EDA (исследовательский анализ данных) играет решающую роль, чтобы получить представление о данном наборе данных. Я провел некоторый анализ и получил несколько полезных графиков.

5.1.Цель:

1. Из приведенного выше анализа мы получили столбец «ЦЕЛЬ», имеющий 2 значения.

2. нам нужно построить модель для прогнозирования столбца «TARGET» на основе приведенных выше графиков, поскольку данный набор данных сильно несбалансирован.

3. В этом наборе данных 3008 неудовлетворенных клиентов и 73012 довольных клиентов.

4. Удовлетворенные и неудовлетворенные клиенты имеют нормальное распределение.

5.2. Важность функции:

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

5.3.Выбросы:

Выбросовая точка — это не что иное, как любая точка, значительно отличающаяся от остальных точек в заданном наборе данных.

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

1. Из приведенного выше анализа выявлены некоторые выбросы.

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

3. Я определил несколько точек-выбросов, существующих в данном наборе данных, и удалил их вручную.

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

Одномерный анализ означает анализ информации, представленной в одной функции в данном наборе данных.

Здесь мы просто наблюдаем, как столбец «var15» распределяется с «Target».

  1. Здесь мы делаем некоторые предположения, основанные на значении «var15». больше неудовлетворенных клиентов, стоимость которых составляет от 20 до 40.
  2. Исходя из этого графика, предположим, что значение «var15» находится в диапазоне от 20 до 40, тогда больше шансов, что клиент будет удовлетворен.
  3. Если значение «var15» клиента больше 40–60, то больше шансов, что клиент неудовлетворен.
  4. Таким образом, эта функция «var15» помогает нашей классификации дать по крайней мере некоторое базовое предположение.

5.5.Двумерный анализ:

  • Двумерный анализ — это не что иное, как анализ того, как две функции ведут себя с зависимым столбцом.
  • Если значение var15 ниже 23 независимо от значения var36, это считается удовлетворенным клиентом.
  • Если значение var15 находится в диапазоне от 23 до 89 (приблизительно), каким бы ни было значение var36, это считается неудовлетворенным клиентом.
  • Эти 2 столбца имеют достойную корреляцию с целью и низкую корреляцию друг с другом, поэтому эти 2 столбца полезны для нашей классификации.
  • Из корреляционной матрицы просто видно, как соотносятся две функции. var15 и var36 хорошо связаны с целевым столбцом. но var15 не коррелирует с var36.

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

1. Если значение saldo_var5 превышает 100000 (приблизительно), эти клиенты являются довольными клиентами.

2. Если var15 ниже 23 (приблизительно), эти клиенты являются довольными клиентами.

3. Если значение num_var35 больше 20, эти баллы считаются довольными клиентами.

4. Если значение saldo_var5 равно 1500000 (приблизительно), а значение ind_var30 равно 1, эти баллы считаются довольными клиентами. если значение saldo_var5 ниже 1500000 (приблизительно), эти баллы считаются неудовлетворенными клиентами.

5. Если значение saldo_var5 ниже 150000 (приблизительно), а значение num_var5 равно 0–5, то эти баллы считаются неудовлетворенными клиентами.

Из многофакторного анализа я не получил ожидаемой интуиции. если вам нужно что-то ясное, просто просмотрите мой код.



6. ПРЕДВАРИТЕЛЬНАЯ ОБРАБОТКА:

6.1.постоянные столбцы:

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

6.2.Квазипостоянные столбцы:

Квазипостоянные признаки означают, что только одно значение доминирует над другими значениями этого признака.

После предварительной обработки набора данных мы получили 251 признак.

7. ИЗБЫТОЧНАЯ ВЫБОРКА:

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

7.1.Смотреть:

Наиболее широко используемый подход к синтезу новых примеров (точек) называется методом передискретизации синтетического меньшинства (SMOTE).

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

Примечание. Данные были разделены на обучающий и тестовый наборы данных. Очень важно применять SMOTE только к обучающему набору, а не к тестовому набору, чтобы избежать загрязнения и внесения смещений в модели.
Параметры, которые можно настраивать, — это K-соседи. который позволяет определить количество ближайших соседей для создания новой выборки и стратегию выборки, которая позволяет указать, сколько новых выборок необходимо создать.

7.2.Адасын:

ADASYN (Adaptive Synthetic) — это алгоритм, генерирующий синтетические данные, и его самые большие преимущества заключаются не в копировании одних и тех же данных меньшинства, а в создании большего количества данных для «более трудных для изучения» примеров.

Adaptive Synthetic over sample — улучшенная версия Smote. То, что он делает, такое же, как SMOTE, только с небольшим улучшением. После создания этих образцов он добавляет к точкам случайные небольшие значения, что делает их более реалистичными. ADASYN похож на SMOTE, но генерирует разные выборки в зависимости от оценки локального распределения класса, для которого требуется избыточная выборка.

8. ЭКСПЕРИМЕНТАЛЬНЫЕ МОДЕЛИ:

Я пробовал использовать некоторые алгоритмы классификации, такие как логистическая регрессия, классификация дерева решений, классификация машины опорных векторов, классификатор XGB, классификатор случайного леса (RF). На основе этих результатов было упомянуто краткое изложение этих моделей ниже и они были немного усовершенствованы.

8.1.Логистическая регрессия:

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

Регуляризация — это метод, используемый для уменьшения ошибок путем надлежащей подгонки функции к заданному обучающему набору и избегания чрезмерной подгонки. в логистической регрессии с использованием методов L1, L2, эластичной сети….
лямбда — это гиперпараметр.

8.1.1.Наилучший:
● Если у вас низкие требования к задержке, хорошо работает логистическая регрессия. предположим, нам нужна система
с малой задержкой, особенно с большими размерами. Мы используем L1-regularizer.
● Если данные почти линейно разделимы, это лучший случай логистической регрессии
● Это хорошо для интерпретации и важности признаков с использованием весов (коэффициентов).
● Меньшее влияние выбросов из-за сигмовидной функции активации.
● Очень быстро обучается, занимает O(d) и очень легко обучается, даже имея большое количество точек данных. (Перед обучением данных нам необходимо выполнение стандартизации признаков является обязательным).
● Если размерность велика, вероятность линейной разделимости очень высока. он работает очень хорошо для больших размеров.

8.1.2.Худший вариант:
● Плохо работает, когда данные не являются линейно разделимыми.
● Когда данные несбалансированы.
● Данные с пропущенными значениями.
● Для базовой модели отсутствует мультиклассовая классификация. Использует метод «один против остальных».
● При наличии мультиколлинеарности эти модели не будут работать должным образом.

8.2.Машина опорных векторов:

SVM был очень популярным алгоритмом машинного обучения в 1990-х годах как для классификации,

и регресс. В svm попытайтесь найти плоскость или гиперплоскость, которая разделяет классы с максимальным запасом. Опорные векторы — это не что иное, как точки, проходящие через плоскости Pi+ или Pi-.

Они называются опорными векторами.

Pi + — это плоскость, параллельная плоскости Pi, которая касается пяти точек.

Pi- это плоскость, параллельная плоскости Pi, которая касается -ve точек.

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

8.2.1.Лучшее:
● Если мы сможем найти правильное ядро, оно будет работать хорошо.
● Это можно применить к нелинейным проблемы.
● Интерпретация способности и важности признаков упрощается для линейного SVM..
● Влияние выбросов меньше.
● Если размерность велика, то SVM работает как шарм.

8.2.2.Худшее:
● Интерпретация способности и важности функций затруднена для SVM ядра.
● Если обучающие данные велики, время обучения высокий.
● Не используется в интернет-приложениях. если у нас есть большое количество опорных векторов (k), то низкая задержка невозможна.

8.3.Деревья решений:

Алгоритмы дерева решений подпадают под категорию контролируемого обучения. Их
можно использовать для решения задач как регрессии, так и классификации. Деревья решений являются вложенными классификатором if..else.
Деревья решений обладают высокой способностью к интерпретации после обучения. вы можете буквально
нарисовать их. Разделяет данные по признаку, который при разделении имеет самый высокий информационный прирост. Энтропия измеряет неопределенность, примесь или беспорядок в заданном наборе значений. Другими словами, энтропия является мерой непредсказуемости.
Используя энтропию, примесь Джини вычисляет прирост информации. на основе прироста информации мы разделяем функции.

8.3.1.Лучший:
● DT обеспечивает интерпретируемость и важность функций.
● Возможна многоклассовая классификация

8.3.2.Худшее:
● несбалансированные данные сильно влияют.
● Если размерность велика, время обучения увеличивается.
● Если вы используете однократное кодирование, время обучения будет большим
● Выбросы влияют на модель.

8.4.Xgboost:

Повышение xg обладает чрезвычайно высокой прогностической способностью, что делает его лучшим выбором для обеспечения точности событий, поскольку он обладает как линейной моделью, так и алгоритмом обучения дерева, что делает алгоритм почти в 10 раз быстрее, чем существующие методы повышения градиента.
Повышение xg также метод регуляризованного бустинга. Это помогает уменьшить моделирование с чрезмерным соответствием и имеет массовую поддержку таких языков, как Java, R, Python, C++.

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

● Xg boost означает экстремальное усиление градиента.
● Xg boost — это расширенная реализация повышения градиента. Этот алгоритм обладает высокой прогностической силой и в десять раз быстрее, чем любые другие методы повышения градиента.

8.5.Классификатор случайного леса:

Случайный лес — это метод обучения, основанный на построении нескольких деревьев решений. Окончательное решение принимается на основе большинства деревьев
и выбирается случайным лесом.
● Случайный лес – наиболее популярный метод формирования пакетов.
● Случайная выборка означает агрегацию Bootstrap с замены.
● Лес означает группу деревьев решений с разумной глубиной.
● Использование дерева решений в качестве базового обучающего элемента.
● Выполнение выборки строк с заменой и Выполнение выборки столбцов (выборка признаков)
● Затем выполняется агрегирование.

8.5.1.Лучший:
●Случайный лес основан на алгоритме мешков и использует технику обучения ансамблю.
Он создает как можно больше деревьев на подмножество данных и объединяет выходные данные всех деревьев. Таким образом, уменьшается дисперсия и, следовательно, повышается точность.
● RF хорошо работает как с категориальными, так и с непрерывными переменными.
● Алгоритм RF очень стабилен. Даже если в набор данных вводится новый набор данных, общий алгоритм не сильно пострадает, поскольку новые данные могут повлиять на дерево, но очень сложно повлиять на все деревья.
● RF обычно устойчив к выбросам и может обрабатывать их автоматически.
● В случае RF не требуется масштабирование признаков (стандартизация и нормализация), поскольку вместо расчета расстояния используется подход, основанный на правилах.

8.5.2.Худший :
● RF требует гораздо больше времени для обучения по сравнению с деревьями решений, поскольку он генерирует много деревьев и принимает решения по большинству голосов.
●РФ требует гораздо больше вычислительной мощности и ресурсов.

8.6. Мета-классификатор пользовательского стека:

Эта модель реализована вручную с использованием лучших моделей, которые я получил из своих экспериментальных моделей, следуя приведенной ниже процедуре.

а) Разделите все ваши данные на поезд и тест (80–20)

б) Теперь, в наборе поездов 80%, разделите набор поездов на D1 и D2 (50–50).

Из этого D1 сделайте выборку с заменой, чтобы создать d1,d2,d3….dk (k выборок). Теперь создайте «k» моделей и обучите каждую из этих моделей с помощью образцов. Каждая модель будет обучаться только на одном образце. Эти модели называются базовыми. Мы можем выбрать лучшую модель и ее гиперпараметры на основе предыдущих результатов. Убедитесь, что «k» можно передать в качестве аргумента.

c) Теперь передайте набор D2 каждой из этих k моделей; теперь вы получите k прогнозов для D2 из каждой из этих моделей.

г) Теперь, используя эти k прогнозов, создайте новый набор данных для D2, вы уже знаете его соответствующие целевые значения, поэтому теперь вы обучаете метамодель с этими k прогнозами.

e) Теперь для оценки модели вы можете использовать 20% данных, которые вы сохранили в качестве тестового набора. Пройдите этот тестовый набор для каждой из базовых моделей, и вы получите «k» прогнозов. Теперь вы создаете новый набор данных с этими k прогнозами и передаете его в свою метамодель, и вы получаете окончательный прогноз. Используя этот окончательный прогноз и цели для тестового набора, вы можете рассчитать показатель производительности модели.



Обзор моделей:

После применения метода избыточной выборки моя метрика обучения улучшилась, но метрика тестирования не сильно улучшилась.

9.ОКОНЧАТЕЛЬНЫЙ ПРОГНОЗ:

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

Я просто предоставляю единственную точку в виде текстового файла, и он берет точку и предсказывает выходное значение, является ли оно классифицированным (0) или неудовлетворенным (1).

10.РЕЗУЛЬТАТ KAGGLE:

11.Локальное развертывание:

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

  1. https://www.youtube.com/watch?v=YfdKAF412Jw

12. АНАЛИЗ ЧАСТОТЫ ОШИБОК:

  • Согласно приведенному выше набору данных, большая часть набора данных имеет разреженный признак (означает нулевое значение).
  • Некоторые функции имеют разные значения в функциях, но эти значения также существовали в наборе тестов kaggle. Поэтому я не удалял эти выбросы для некоторых функций.
  • Некоторые функции имеют выбросы, поэтому некоторым моделям не присваивается хорошая метрика. Но Xgb очень хорошо работает с выбросами, поэтому дает хороший показатель по сравнению с другими моделями.
  • Согласно моему анализу, большинство функций сильно перекрываются между удовлетворенными и неудовлетворенными клиентами.
  • Для получения хороших результатов нам нужны более реальные данные. Здесь я использовал другие методы избыточной выборки, но у меня не было хорошей интуиции для моей классификации.

13. НАБЛЮДЕНИЕ:

  • В этом наборе данных большинство неправильно классифицированных точек и классифицированных точек имеют одинаковое значение в большинстве признаков.
  • Здесь у нас много совпадений между довольными и неудовлетворенными клиентами.
  • В случае, если я использую метод удара, он добавляет некоторые синтетические баллы, но увеличивает количество правильно классифицированных неудовлетворенных клиентов, но большинство баллов являются неправильно классифицированными баллами.
  • Когда мы пытаемся добавить новые точки с помощью SMOTE, он создает некоторые новые значения функций, и эти значения не существуют в наборе тестовых данных, поэтому бесполезно улучшать нашу метрику.
  • В случае, если мы используем ADA SYN, он дает хорошее значение метрики, но не сильно отличается от значения метрики.
  • ADA SYN генерирует синтетические точки для более сложного изучения в окрестностях и добавляет некоторый шум, чтобы сделать синтетические данные естественными.
  • Здесь большинство точек данных имеют перекрывающиеся значения, и их так сложно интерпретировать как удовлетворенные или неудовлетворенные.
  • Насколько я понимаю, нам нужны более реалистичные данные о неудовлетворенных клиентах, и еще одна вещь заключается в том, что все эти функции являются анонимными функциями.
  • Предположим, что эти функции имеют имена, по крайней мере, мы выполняем некоторую причинно-следственную связь, а затем решаем, какая функция полезна для классификации.

14. Будущая работа:

  1. Выполнение большего количества EDA (исследовательского анализа данных) для набора данных и использование некоторых других методов передискретизации.
  2. Эксперимент с Наивным Байесом (NB), K ближайших соседей.
  3. Эксперименты с методами глубокого обучения.

15.Ссылка на код Github:



  1. https://github.com/KancharlaSaiRam/CaseStudy1_Santander-Customer-Satisfaction

16.LINKEDIN ССЫЛКА:



17.Ссылки:

  1. https://www.appliedaicourse.com/course/11/applied-machine-learning-online-course
  2. https://www.kaggle.com/c/santander-customer-satisfaction/обзор
  3. https://machinelearningmastery.com/smote-oversampling-for-imbalanced-classification/
  4. https://towardsdatascience.com/metrics-for-imbalanced-classification-41c71549bbb5
  5. https://medium.com/@nissanttiwari/santander-customer-satisfaction-82eacb41a2b3
  6. https://imbalanced-learn.org/stable/references/generated/imblearn.over_sampling.SMOTE.html
  7. https://dash.plotly.com/dash-core-components