Почему разняться результаты на тестовой выборке и при тестировании вручную (sklearn)
Появилась задача бинарной классификации (депрессивный/нейтральный текст), набор данных пример по 30к. для каждого класса. Решил что использую SVC для создания модели и написал небольшой pipeline для облегчения работы.
pipe_svc_dep = Pipeline([
("tfidf", TfidfVectorizer(tokenizer=lambda x: tokenize_normalize_text(x, min_word_length=3, max_word=100), lowercase=False)),
("scaler", StandardScaler(with_mean=False)),
('svc', svm.SVC(kernel='linear', C=1))
])
pipe_svc_dep.fit(train_df["clean_text"],train_df["label"])
После обучения прогнал модель через тестовую выборку и результаты порадовали.
prediction_svc_dep = pipe_svc_dep.predict(test_df["clean_text"])
print(f'Точность: {accuracy_score(prediction_svc_dep, test_df["label"])}')
print(f'F1: {f1_score(prediction_svc_dep, test_df["label"])}')
print(confusion_matrix(prediction_svc_dep, test_df["label"]))
>>>Точность: 0.9396
>>>F1: 0.940221694378464
>>>[[4646 268]
[ 336 4750]]
Но когда начал тестировать вручную, то озадачился результатом, примерно 90% всех фраз определились в первый класс (депрессивный) хотя посты содержали разные тональности, разные размеры.
*предварительно данные были очищены небольшой функцией
def tokenize_normalize_text(text, min_word_length=2, max_word=300):
tokens = ' '.join([re.sub(r'\b(https?:?\s?//|www\.?)\w+?[\w+_:./0-9]+', "", text).strip()])
tokens = word_tokenize(tokens, language="russian")
tokens = [i.lower() for i in tokens]
tokens = [i for i in tokens if i not in punctuation]
tokens = [word for word in tokens if word not in stop_word]
tokens = [snowball.stem(i) for i in tokens]
tokens = [i for i in tokens if len(i)>min_word_length]
tokens = tokens[:max_word]
tokens =' '.join(tokens)
return tokens
Так же были опробованы модели LogisticRegression, LogisticRegressionCV, LinearSVC. На первых двух результат был похожий:
LogisticRegression
>>>Точность: 0.9359
>>>F1: 0.9359
LogisticRegressionCV
>>>Точность: 0.9425
>>>F1: 0.9432
Собственно, почему при тестировании на тестовой выборке результаты отличные, а при тестировании в ручную отвратительные?? Подскажите хотя бы в какую сторону смотреть, а то опыта в данной теме не хватает. Спасибо.