В общем, проблема прогнозирования для данных с отсутствием является трудной и не решаемой.
С точки зрения статистики: прогнозируемый ближайший сосед для некоторой контрольной точки xₜ
обозначается ŷ(xₜ)
, Пусть некоторые компоненты xₜ
отсутствуют, поэтому мы пишем xₜ=(zₜ,wₜ)
, где компоненты wₜ
отсутствуют. Тогда уверенность в том, что модель предсказывает k
, может быть записана как Pr(ŷ(xₜ)=k)=P(ŷ(zₜ)=k)= ∫I(k=ŷ(zₜ,w))p(w|zₜ)dw
, где I(t)=1
, если t=true
и 0
в противном случае. Наконец, вы можете выбрать прогноз ỹ(xₜ)
в качестве режима Pr(ŷ(xₜ)=k)
, то есть ỹ(xₜ) = argmax_k Pr(ŷ(xₜ)=k)
.
Это сложная проблема, поскольку для вычисления интеграла необходимо оценить некоторые условные плотности. Вам также необходимо вычислить интеграл для всех возможных ближайших соседей.
Если вы сделаете какое-то ограничивающее предположение, например, «Пропущено полностью случайно», тогда проблема упрощается, как p(w|zₜ)=p(w)
от независимости. Ваши прогнозы, вероятно, ухудшатся. Простого способа решения этой проблемы не существует.
Таким образом, вам нужен компромисс между статистической достоверностью и практическим применением. Обычно это делается с помощью какого-то вменения. Я думаю, что у вас должен быть какой-то метод вменения, который бы достаточно хорошо улавливал корреляции в данных.
Я бы, вероятно, использовал бы knn-imputer в sklearn для вменения пропущенных значений, а затем просто go для поиска ближайшего соседа по вмененным данным.