В отрасли существует общепринятое мнение, что «данные и функции определяют верхний предел проектов машинного обучения, а алгоритм как раз максимально приближает этот верхний предел». В реальном бою проработка особенностей занимает почти половину времени, что является очень важной частью. Обработка отсутствующих значений, обработка выбросов, стандартизация данных, несбалансированность и другие проблемы должны быть легкой задачей для всех В этой статье мы обсуждаем яму, которую легко упустить из виду: согласованность данных.
хорошо известный, большинство алгоритмов машинного обучения исходят из того, что образцы обучающих данных и тестовые образцы в местоположениях поступают из одного и того же распределения. Если распределение тестовых данных не соответствует обучающим данным, это повлияет на производительность модели.
В некоторых соревнованиях, связанных с машинным обучением, некоторые функции в данном обучающем наборе и тестовом наборе могут иметь несогласованное распределение. В практических приложениях с развитием бизнеса будет меняться и распределение обучающих выборок, что в итоге приведет к недостаточной обобщающей способности модели.
Вот несколько способов проверить согласованность распределения признаков в обучающем наборе и тестовом наборе:
График распределения KDE (оценка плотности ядра)
Оценка плотности ядра используется для оценки неизвестных функций плотности в теории вероятностей и является одним из методов непараметрического тестирования.Характеристики распределения самих выборок данных можно интуитивно увидеть через график оценки плотности ядра.
kdeplot в Seaborn можно использовать для оценки плотности ядер и визуализации для одномерных и двумерных моделей.
См. небольшой пример:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
train_set=pd.read_csv(r'D:\...\train_set.csv')
test_set=pd.read_csv(r'D:\...\test_set.csv')
plt.figure(figsize=(12,9))
ax1 = sns.kdeplot(train_set.balance,label='train_set')
ax2 = sns.kdeplot(test_set.balance,label='test_set')
КС проба (Колмогорова-Смирнова)
Тест KS основан на кумулятивной функции распределения и используется для проверки того, соответствует ли распределение теоретическому распределению, или для сравнения того, существенно ли различаются два эмпирических распределения. Двухвыборочный критерий К-С является одним из наиболее полезных и часто используемых непараметрических методов сравнения двух выборок, поскольку он чувствителен к различиям в параметрах положения и формы эмпирических функций распределения двух выборок.
Мы можем использовать ks_2samp из библиотеки scipy.stats для выполнения теста KS:
from scipy.stats import ks_2samp
ks_2samp(train_set.balance,test_set.balance)
Тест ks обычно возвращает два значения: первое значение представляет максимальное расстояние между двумя распределениями, и чем меньше значение, тем меньше разрыв между двумя распределениями и тем более согласованны распределения. Второе значение — это p-значение, параметр, используемый для определения результата проверки гипотезы.Чем больше p-значение, тем меньше вероятность отвергнуть нулевую гипотезу (два проверяемых распределения распределены одинаково), т. е. , тем более одинаково распределены два распределения.
Ks_2sampResult(statistic=0.005976590587342234, pvalue=0.9489915858135447)
Из окончательного возвращенного результата видно, что функция баланса подчиняется одному и тому же распределению в обучающем наборе и тестовом наборе.
Состязательная проверка
Помимо тестов KDE и KS, в настоящее время более популярна состязательная валидация, которая является не методом оценки эффекта модели, а методом подтверждения изменения распределения обучающей выборки и тестовой выборки.
конкретные методы:
1. Объедините обучающий набор и тестовый набор в набор данных, добавьте столбец меток, образцы в обучающем наборе помечены как 0 , а образцы в тестовом наборе помечены как 1 .
2. Повторно разделите новый набор train_set и test_set (отличный от исходного обучающего набора и тестового набора).
3. Используйте train_set для обучения двухклассовой модели, вы можете использовать LR, RF, XGBoost, LightGBM и т. д. с AUC в качестве индикатора модели.
4. Если AUC составляет около 0,5, это означает, что модель не может различить исходный обучающий набор и тестовый набор, то есть их распределение является согласованным. Если AUC относительно велик, это означает, что исходный обучающий набор и тестовый набор сильно различаются, а распределение несовместимо.
5. Используйте модель классификатора на шаге 2, чтобы оценить и предсказать исходный обучающий набор, и отсортируйте образцы в соответствии с оценкой модели от больших к малым.Чем больше оценка модели, тем ближе она к тестовому набору, затем возьмите обучающая выборка Выборки TOP N используются в качестве контрольной выборки целевой задачи, так что исходные выборки могут быть разделены для получения обучающей выборки, проверочной выборки и тестовой выборки.
В дополнение к определению согласованности распределений признаков между обучающими и тестовыми наборами, состязательная проверка также может использоваться для выбора признаков. Если вам интересно, вы можете поставить лайк + посмотреть В следующей лекции «Выбор функций» мы будем использовать пример, чтобы увидеть конкретное использование и эффект состязательной проверки.