Ужасната стойност на NaN, когато започнах пътуването си в науката за данни, мразех да се занимавам с липсващи стойности. Но след като започнете да изграждате интуиция зад различните методи за справяне с NaN, започвате да разбирате значението на избора на правилен метод*. В тази публикация в блога ще обсъдя различни начини, които можем да използваме, за да се справим с липсващи стойности в данните. Методите, които ще обсъдя са:

1. Пуснете колоната или реда

2. Средно/медианно импутиране

3. Най-честото импутиране

4. Вменяване на неизвестна стойност

5. Прогноза за липсващи стойности

6. Използване на алгоритми, устойчиви на липсващи стойности

7. Разни начини

Първо, нека се опитаме да разберем с прости думи причината за споменатите липсващи стойности, използвайки ситуация от реалния свят. Да предположим, че провеждате проучване, за да съберете данни от вашите клиенти, има четири въпроса, които сте задали - име, фамилия, заплата и възраст. Някои клиенти може да нямат фамилно име, други може да не се чувстват комфортно да дават чувствителна информация като заплата, а някои не биха искали да споделят възрастта си.

Няма да обсъждам кода за прилагане на тези методи в този блог, ако искате да разберете изпълнението на тези методи, вижте моето хранилище тук.

1. Пуснете колоната или реда

data.dropna(axis=1, inplace=True) #drop колони

data.dropna(axis=0, inplace=True) #drop ред

Ааа!! простотата на този подход, искам да кажа, че трябва да го харесате!! Животът щеше да е толкова прост, ако можехме просто да използваме този подход за всички набори от данни. Този подход води до точен и стабилен модел, това е така, защото не сме използвали никакви техники за условно изчисляване, за да „отгатнем“ липсващата стойност. Не бих препоръчал използването на този подход във вашите проекти, тъй като те водят до загуба на „ценни“ данни. Няколко ситуации, в които можете дори да помислите за използването на този подход, са описани по-долу:

а. Когато имате колона или ред без подходяща информация.

b. Когато имате милиарди редове и изтриването на няколко реда няма да има голяма разлика.

° С. Когато имате колона с голяма част от липсващите данни.

2. Средно/медианно импутиране

Този метод е много лесен за изчисляване и се използва широко за заместване на липсващи стойности в набора от данни. Този метод се използва най-добре, когато данните липсват напълно произволно (MCAR), т.е. съществува еднаква вероятност всяко наблюдение да липсва. Медианното импутиране е устойчиво на извънредни стойности, но средното импутиране не е. Можете да видите на следното изображение разликата в графиките на KDE, когато заменим липсващата стойност със средна стойност или медиана.

Предимства: Лесен за внедряване и работи добре с малък набор от данни.

Недостатъци: Промяна в първоначалната вариация, този метод добавя отклонение и вариация и работи само за числови данни.

3. Най-честото импутиране

Този подход се използва за попълване на липсващи стойности в категорични колони. Всъщност е доста просто, просто заменете липсващите стойности с най-честата стойност в колона. Този подход има същите предимства и недостатъци като средната/средната импутация.

Съгласно горната диаграма за преброяване, всички липсващи стойности в колоната Embarked могат да бъдат заменени от категорията „S“.

4. Вменяване на неизвестна стойност

При този подход запълваме липсващата стойност с уникална категория, нека приемем „U“ за неизвестно. Този подход работи добре в ограничени случаи. Да предположим, че събирате данни от различни жертви на борда на Титаник след потъването му, искате да анализирате - дали има някаква конкретна причина защо тези пътници са оцелели. Във вашия набор от данни има колона, която ви казва местоположението на пътника на кораба, когато айсбергът се удари. За съжаление не можете да съберете тези данни за всички пътници, които не са преживели инцидента. В този случай създаването на уникална категория може да бъде полезно за разработване на представа за данните. Може би пътниците в местоположение „U“ са имали много по-малък шанс за оцеляване.

В повечето случаи обаче, след като извършим еднократно кодиране, ще имаме нова функция в нашия набор от данни, което може да доведе до намалена точност на нашия модел. Такъв е случаят, когато данните липсват в набора от данни поради напълно случайни причини.

На снимката по-горе можете да видите, че колоната Cabin има много уникални стойности, а също и nan. От първоначалния анализ знаем, че колоната Кабина има687 липсващи стойности.

След като заменим известните стойности с „K“ и неизвестните стойности с „U“, можем да видим, че повече хора, които не са оцелели, имат неизвестни типове кабини.

5. Прогноза за липсващи стойности

Забележка: В случай на регресия се уверете, че няма мултиколинеарност, проверете за VIF (фактор на инфлация на отклонение) и толеранс, преди да продължите с този подход.

При този подход предвиждаме липсващите стойности. Обяснява се в следните стъпки:

a) X Данни за обучение = всички колони с изключение на независимата променлива (искаме да избегнем изтичане на данни), имащи редове с nan

b) y Данни за обучение = колоната, чиито липсващи стойности искате да предвидите, като има само редове без nan

c) X Данни за прогнозиране = колоната, чиито липсващи стойности искате да предвидите, като има само редове с nan

d) обучете модела на X_train и y_train

д) прави прогнози на X_pred

f) заменете всички редове с nan в оригинален набор от данни със стъпка-(e) (само за колоната, чиито липсващи стойности приписвате)

Това е диаграмата на KDE на колона за възраст както върху оригиналните данни, така и върху данните, след като сме заменили липсващите стойности с прогнози.

6. Използване на алгоритми, устойчиви на липсващи стойности

Има много алгоритми, които могат да се справят с липсващи стойности сами, някои от тях като RandomForest и K Nearest Neighbors са общоизвестни, а други като CatBoost не са много известни. Препоръчвам да прегледате документацията на CatBoost веднъж: https://catboost.ai/.

7. Разни начини

- Библиотека Datawig

Това е документацията за DataWig, рамка за обучение на модели за приписване на липсващи стойности в таблици.

- Последно пренесено наблюдение (LOCF)

При този метод последната известна стойност се пренася към липсващата стойност и може лесно да се приложи с помощта на pandas.

data.fillna(method='fill')

Други налични методи са: „backfill“, „bfill“, „pad“, „ffill“

pad / ffill: разпространява последното валидно наблюдение напред към следващото валидно и backfill / bfill: използва следващото валидно наблюдение за запълване на пропуска.

- Интерполация

Интерполацията е математически метод, който настройва функция към вашите данни и използва тази функция, за да екстраполира липсващите данни. Най-простият тип интерполация е линейната интерполация, която прави средна стойност между стойностите преди липсващите данни и стойността след тях.

Заключение

Не можете наистина да знаете правилния начин за справяне с липсващите данни предварително, трябва да приложите някои от тези методи, ако не всички, и да сравните техните резултати. Наличието на известна представа за данните и изявлението на проблема може да ви даде някакъв намек за това кой метод може да е по-подходящ. Надявам се, че този блог е бил полезен и бих препоръчал практикуването на тези методи върху титаничния набор от данни, достъпен тук.