В предыдущей статье мы построили модель, которая классифицирует отзывы на положительные или отрицательные в зависимости от полученных данных. Мы достигли показателя точности 94 %, но является ли точность наиболее эффективным показателем для оценки производительности модели? В этой статье мы углубимся в эту тему и рассмотрим подходы к усовершенствованию модели, построенной с использованием данных DataDNA iPhone Reviews Dataset Challenge.

Проверка набора данных: сбалансированный или несбалансированный?

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

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

df['sentiment'] = df['sentiment_val'].replace({0 : 'negative'})
df['sentiment'] = df['sentiment'].replace({1 : 'positive'})
fig = px.histogram(df, x="sentiment")
fig.update_traces(marker_color="indianred",marker_line_color='rgb(8,48,107)',
                  marker_line_width=1.5)
fig.update_layout(title_text='Product Sentiment')
fig.show()

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

Работа с несбалансированными данными

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

В этой статье мы будем использовать SMOTE (Synthetic Minority Oversampling Technique), метод, который включает создание синтетических наблюдений из класса меньшинства.

print("Before OverSampling, counts of label '1': {}".format(sum(y_train == 1)))
print("Before OverSampling, counts of label '0': {} \n".format(sum(y_train == 0)))

# import SMOTE module from imblearn library
# pip install imblearn (if you don't have imblearn in your system)
from imblearn.over_sampling import SMOTE
sm = SMOTE(random_state = 2)
X_train_res, y_train_res = sm.fit_resample(X_train, y_train)

print('After OverSampling, the shape of train_X: {}'.format(X_train_res.shape))
print('After OverSampling, the shape of train_y: {} \n'.format(y_train_res.shape))

print("After OverSampling, counts of label '1': {}".format(sum(y_train_res == 1)))
print("After OverSampling, counts of label '0': {}".format(sum(y_train_res == 0)))

Из вывода мы можем видеть, что набор данных теперь сбалансирован, что позволяет нам продолжить построение модели.

Правильный выбор модели

В этой статье мы сравним производительность модели XGBoost и логистической регрессии на наших данных.

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

Заключение

Из статьи мы можем сделать вывод, что;

  1. По сравнению с векторизатором счета, векторизатор TF-IDF предлагает вложения, которые позволяют создавать значительно более точные модели машинного обучения.
  2. SMOTE обеспечивает сбалансированное увеличение класса меньшинства, повышая эффективность модели.
  3. Вместо того, чтобы полагаться исключительно на точность, для оценки моделей, обученных на несбалансированных данных, можно использовать альтернативные показатели производительности, такие как точность, полнота и оценка F1.

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