KNN ведь метрический алгоритм? Если что, датасет вот этот: https://www.kaggle.com/kashnitsky/mlcourse?select=telecom_churn.csv
Лучший вопрос - а почему kNN вообще должно здесь работать? KNN - какой-то непонятный выбор. Во-первых, потому что нет уверенности, что близость значений длины аккаунта или близость значений кода зоны как-то отражают реальную похожесть аккаунтов. Я говорю не про полное совпадение, а про то, почему код 436 должен быть ближе к 437,чем 438? В чем должна быть магия?
Во-вторых, number vmail messages - там очевидно сидит два распределения - один константный 0, а другое, скорее всего, нормальное. Если человек услугой не пользуется, и все остальные значения, если человек услугой пользуется. В этом смысле 0 "гораздо дальше" от всех остальных чисел. Метрика так должны быть такой, что, скажем, 10 ближе к 40, чем к 0.
А вопрос в действительности вообще в том, а что, собственно вы вообще пытаетесь предсказать и почему решили, что kNN вообще должен давать какой-то осмысленный результат, если большая часть параметров у вас качественные, а не количественные?
-------------------------------------------------------------------------------
Настаиваю и буду настаивать, что правильно говорить "нормировка" (norming), а не "нормализация" (normalization), хоть второй термин и гораздо более прижился, но он вызывает неправильные ассоциации, будто мы приводим распределение к нормальному, хотя с распределением мы качественно ничегошеньки не делаем. А нормировка вызываем правильные ассоциации, что мы приводим длины вектора к стандартному виду.