Εισαγωγή από άκρο σε άκρο στον χειρισμό τιμών που λείπουν

Κόμβος πηγής: 1121996

Αυτό το άρθρο δημοσιεύθηκε ως μέρος του Επιστήμη δεδομένων Blogathon

Επισκόπηση

Τα δεδομένα μας παρέχουν τη δύναμη να αναλύσουμε και να προβλέψουμε τα γεγονότα του μέλλοντος. Κάθε μέρα, όλο και περισσότερες εταιρείες υιοθετούν τεχνικές επιστήμης δεδομένων, όπως πρόβλεψη πρόβλεψης, ομαδοποίηση και ούτω καθεξής. Ενώ είναι πολύ συναρπαστικό να συνεχίζετε να μαθαίνετε περίπλοκους αλγόριθμους ML και DL, δεν πρέπει να ξεχάσετε να κατακτήσετε το ουσιαστικό προεπεξεργασία δεδομένωνΤο Ένα από τα σημαντικά μέρη της προεπεξεργασίας δεδομένων είναι ο χειρισμός τιμών που λείπουν. Αυτός είναι ένας πλήρης οδηγός για τον τρόπο αντιμετώπισης διαφορετικών τύπων δεδομένων που λείπουν.

Περιεχόμενα

  1. Γιατί είναι σημαντικό να χειρίζεστε τις τιμές που λείπουν;
  2. Λόγοι πίσω από τις τιμές που λείπουν
  3. Τύποι τιμών που λείπουν
  4. Ελέγξτε για τιμές που λείπουν στο σύνολο δεδομένων
  5. Οπτικοποίηση τιμών που λείπουν
  6. Πτώση σειρών με τιμές που λείπουν
  7. Πτώση στηλών με τιμές που λείπουν
  8. Καταλογισμός συνεχών μεταβλητών
    1. Καταλογισμός με μέσο όρο
    2. Καταλογισμός με διάμεσο
  9. Πρόβλεψη των τιμών που λείπουν με παλινδρόμηση
  10. Λείπουν τιμές στα Κατηγοριακά δεδομένα
  11. Λείπουν τιμές στα δεδομένα χρονικής σειράς
    1. Προώθηση-συμπλήρωση τιμών που λείπουν
    2. Συμπλήρωση προς τα πίσω τιμών που λείπουν
    3. Γραμμική παρεμβολή
  12. Αλγόριθμοι ισχυροί έως τιμές που λείπουν
  13. Συμπέρασμα

Γιατί είναι σημαντικό να χειριστούμε τα δεδομένα που λείπουν;

Τα δεδομένα στον πραγματικό κόσμο έχουν πολλά δεδομένα που λείπουν στις περισσότερες περιπτώσεις. Μπορεί να υπάρχουν διαφορετικοί λόγοι για τους οποίους λείπει κάθε τιμή. Ενδέχεται να υπάρχει απώλεια ή καταστροφή δεδομένων ή μπορεί να υπάρχουν και συγκεκριμένοι λόγοι. Τα δεδομένα που λείπουν θα μειώσουν την προγνωστική ισχύ του μοντέλου σας. Εάν εφαρμόσετε αλγόριθμους με δεδομένα που λείπουν, τότε θα υπάρχει προκατάληψη στην εκτίμηση των παραμέτρων. Δεν μπορείτε να είστε σίγουροι για τα αποτελέσματά σας εάν δεν χειριστείτε τα δεδομένα που λείπουν.

Λόγοι πίσω από τις τιμές που λείπουν

Αναρωτηθήκατε ποτέ για τους λόγους πίσω από τα δεδομένα που λείπουν σε σύνολα δεδομένων;

Μερικοί από τους πιθανούς λόγους πίσω από τα δεδομένα που λείπουν είναι:

  • Οι άνθρωποι δεν δίνουν πληροφορίες σχετικά με ορισμένες ερωτήσεις σε μια έρευνα συλλογής δεδομένων. Για παράδειγμα, ορισμένοι μπορεί να μην αισθάνονται άνετα να μοιράζονται πληροφορίες σχετικά με τον μισθό τους, το ποτό και το κάπνισμα. Αυτά παραλείπονται σκόπιμα από τον πληθυσμό
  • Σε ορισμένες περιπτώσεις, τα δεδομένα συσσωρεύονται από διάφορες διαθέσιμες προηγούμενες εγγραφές και όχι άμεσα. Σε αυτήν την περίπτωση, η διαφθορά των δεδομένων είναι ένα μείζον ζήτημα. Λόγω της χαμηλής συντήρησης, ορισμένα τμήματα δεδομένων είναι κατεστραμμένα με αποτέλεσμα να λείπουν δεδομένα
  • Οι ανακρίβειες κατά τη διαδικασία συλλογής δεδομένων συμβάλλουν επίσης στην έλλειψη δεδομένων. Για παράδειγμα, στην χειροκίνητη εισαγωγή δεδομένων, είναι δύσκολο να αποφευχθούν εντελώς ανθρώπινα λάθη
  • Ασυμφωνίες εξοπλισμού που οδηγούν σε ελαττωματικές μετρήσεις, οι οποίες με τη σειρά τους δεν μπορούν να χρησιμοποιηθούν.

Τύποι χαμένων αξιών

Τα δεδομένα που λείπουν μπορεί να προκύψουν για διάφορους λόγους. Μπορούμε να τα κατηγοριοποιήσουμε σε τρεις κύριες ομάδες: Missing Completely at Random, Missing At Random, Not Missing at Random.

1. Λείπει εντελώς τυχαία (MCAR)

Τα δεδομένα που λείπουν δεν ακολουθούν κάποιο συγκεκριμένο μοτίβο, είναι απλά τυχαία. Η έλλειψη αυτών των δεδομένων είναι άσχετη ή ανεξάρτητη από τις υπόλοιπες μεταβλητές. Δεν είναι δυνατόν να προβλεφθούν αυτές οι τιμές με τα υπόλοιπα μεταβλητά δεδομένα. Για παράδειγμα, κατά τη συλλογή δεδομένων, ένα συγκεκριμένο δείγμα χάνεται λόγω απροσεξίας. Αυτή είναι μια ιδανική περίπτωση, όπου στατιστικά η ανάλυση δεν θα είναι προκατειλημμένη. Αλλά δεν πρέπει να υποθέσετε την παρουσία του MCAR εκτός αν είστε πολύ σίγουροι καθώς πρόκειται για μια σπάνια κατάσταση.

2. Λείπει τυχαία (MAR)

Σε αντίθεση με το MCAR, τα δεδομένα λείπουν μεταξύ συγκεκριμένων υποσυνόλων. Είναι δυνατό να προβλεφθεί εάν τα δεδομένα θα είναι παρόντα/απουσία με τη βοήθεια άλλων χαρακτηριστικών. Αλλά, δεν μπορείτε να προβλέψετε τα ίδια τα δεδομένα που λείπουν.

Για παράδειγμα, ας εξετάσουμε μια έρευνα σχετικά με τον χρόνο που αφιερώνεται στο διαδίκτυο, η οποία περιλαμβάνει μια ενότητα σχετικά με τον χρόνο που αφιερώνεται σε πλατφόρμες όπως το Netflix, amazon prime. Παρατηρείται ότι οι ηλικιωμένοι (άνω των 45 ετών) είναι λιγότερο πιθανό να το γεμίσουν από τους νεότερους. Αυτό είναι ένα παράδειγμα MAR. Εδώ, η παράμετρος «Ηλικία» αποφασίζει εάν τα δεδομένα θα λείπουν ή όχι. Το MAR εμφανίζεται πολύ συχνότερα από το MCAR.

3. Δεν λείπει τυχαία (NMAR)

Αυτή είναι μια σοβαρή και δύσκολη κατάσταση. Ας πούμε ότι ο σκοπός της έρευνας είναι να μετρήσει την υπερβολική χρήση/εθισμό στα κοινωνικά μέσα. Εάν οι άνθρωποι που χρησιμοποιούν υπερβολικά τα κοινωνικά μέσα, δεν συμπληρώνουν την έρευνα σκόπιμα, τότε έχουμε μια περίπτωση NMAR. Αυτό πιθανότατα θα οδηγήσει σε προκατάληψη στα αποτελέσματα. Οι συνήθεις μέθοδοι, όπως η πτώση γραμμών/στηλών, ο καταλογισμός δεν θα λειτουργήσουν. Για να επιλυθεί αυτό, θα ήταν απαραίτητη η σε βάθος γνώση του τομέα.

Τώρα που είδαμε τους διαφορετικούς τύπους δεδομένων που λείπουν, ας προχωρήσουμε στους διάφορους τρόπους χειρισμού τους.

Ελέγξτε για τιμές που λείπουν

Όταν έχετε ένα σύνολο δεδομένων, το πρώτο βήμα είναι να ελέγξετε ποιες στήλες έχουν δεδομένα που λείπουν και πόσες. Ας χρησιμοποιήσουμε το πιο διάσημο σύνολο δεδομένων που μαθαίνει η επιστήμη των δεδομένων, φυσικά, ο επιζών του Τιτανικού! Διαβάστε το σύνολο δεδομένων χρησιμοποιώντας τη λειτουργία pandas read_csv όπως φαίνεται παρακάτω.

τρένο = pd.read_csv ('../ input/titanic/train.csv') test = pd.read_csv ('../ input/titanic/test.csv') print ("σχήμα δεδομένων εκπαίδευσης:", train.shape ) print ('Testing data shape:', test.shape) train.head ()

Λείπουν δεδομένα τιμών

Πηγή: Εικόνα από το σημειωματάριο Kaggle του συγγραφέα

Τώρα έχουμε τα πλαίσια δεδομένων εκπαίδευσης και δοκιμής τιτανικών δεδομένων.

Πώς να ελέγξετε ποιες στήλες έχουν δεδομένα που λείπουν και πόσες;

Η συνάρτηση "isnull ()" χρησιμοποιείται για αυτό. Όταν καλείτε τη συνάρτηση αθροίσματος μαζί με το isnull, το συνολικό άθροισμα των δεδομένων που λείπουν σε κάθε στήλη είναι η έξοδος.

missing_values ​​= train.isnull (). sum () print (missing_values)
PassengerId 0 Survived 0 Pclass 0 Name 0 Sex 0 Age 177 SibSp 0 Parch 0 Ticket 0 Fare 0 Cabin 687 Embarked 2 dtype: int64

Παρατηρήστε ότι 3 στήλες έχουν τιμές που λείπουν: Ηλικία, καμπίνα, επιβίβαση

Αν και γνωρίζουμε πόσες τιμές λείπουν σε κάθε στήλη, είναι απαραίτητο να γνωρίζουμε το ποσοστό αυτών έναντι των συνολικών τιμών. Έτσι, ας το υπολογίσουμε σε μία μόνο γραμμή κώδικα.

mis_value_percent = 100 * train.isnull (). sum () / len (train) print (mis_value_percent)
PassengerId 0.000000 Survived 0.000000 Pclass 0.000000 Όνομα 0.000000 Sex 0.000000 Ηλικία 19.865320 SibSp 0.000000 Parch 0.000000 Εισιτήριο 0.000000 Fare 0.000000 Cabin 77.104377 Embarked 0.224467 dtype: float64

Είναι σαφές ότι λείπει το 77% της στήλης «Καμπίνα», το οποίο είναι ένα πολύ σημαντικό ποσοστό. Η ηλικία έχει περίπου 19% των δεδομένων που λείπουν και το Embarked έχει μόνο το 0.2% που λείπουν. Αυτή είναι η ποσοτική ανάλυση των δεδομένων που λείπουν. Τι γίνεται με τα ποιοτικά; Συνέχισε να διαβάζεις!

Οπτικοποίηση τιμών που λείπουν με το Missingno

Μάντεψε? Έχουμε ένα πακέτο python ειδικά για την οπτικοποίηση και την εξερεύνηση των δεδομένων που λείπουν από ένα σύνολο δεδομένων. Το πακέτο python "Missingno". Προχωρήστε και εγκαταστήστε το γρήγορα

pip εγκατάστασης που λείπει

Χρησιμοποιώντας αυτό, μπορούμε να κάνουμε απεικονίσεις με τη μορφή θερμικών χαρτών, γραφημάτων ράβδων και πινάκων. Αναλύοντας τον τρόπο κατανομής τους, μπορείτε να συμπεράνετε σε ποια κατηγορία ανήκουν σε MCAR, MAR ή NMAR. Μπορούμε επίσης να βρούμε τη συσχέτιση των στηλών που περιέχουν τα ελλείποντα με τη στήλη στόχου

Ξεκινήστε κάνοντας ένα γράφημα ράβδων για μη μηδενικές τιμές χρησιμοποιώντας τη συνάρτηση 'bar ()' της βιβλιοθήκης που λείπει. Έχετε περάσει το πλαίσιο δεδομένων pandas σε αυτήν τη λειτουργία.

εισαγωγή missno ως msno msno.bar (τρένο)

λείπει | | λείπουν τιμέςΠηγή: Εικόνα από το σημειωματάριο Kaggle του συγγραφέα

Στη συνέχεια, μπορούμε να σχεδιάσουμε την απεικόνιση μήτρας. Αυτό μας βοηθά να γνωρίζουμε πώς διανέμονται τα δεδομένα που λείπουν μέσω των δεδομένων, δηλαδή εάν είναι τοπικά προσαρμοσμένα ή ομοιόμορφα διαδεδομένα, ή υπάρχει κάποιο μοτίβο και πολλές τέτοιες ερωτήσεις.

msno.matrix (τρένο)
γραμμή μοτίβου

Στο διάγραμμα μήτρας, θα δείτε κενές γραμμές για κάθε δεδομένα που λείπουν. Παρατηρήστε ότι η στήλη "Επιβιβάστηκε" έχει μόνο δύο τυχαία δεδομένα που λείπουν, τα οποία δεν ακολουθούν κανένα μοτίβο. Πιθανότατα χάθηκαν κατά την απόκτηση δεδομένων. Έτσι, αυτό μπορεί να ταξινομηθεί ως Λείπει εντελώς τυχαία.

Οι στήλες ηλικίας και καμπίνας θα μπορούσαν ενδεχομένως να είναι ΜΑΡ. Αλλά θέλουμε να διασφαλίσουμε ότι δεν υπάρχουν συσχετισμοί μεταξύ τους.

Πώς να το κάνω αυτό?

Ευτυχώς για εμάς, το πακέτο που λείπει παρέχει επίσης τη λειτουργία "heatmap". Χρησιμοποιώντας αυτό μπορούμε να βρούμε εάν υπάρχουν συσχετίσεις μεταξύ των δεδομένων που λείπουν από διαφορετικές στήλες.

msno.heatmap (τρένο)

Η έξοδος εμφανίζεται!

θερμικός χάρτης | λείπει η τιμή

Ο θερμικός χάρτης δείχνει ότι δεν υπάρχει τόσο ισχυρός συσχετισμός μεταξύ των στοιχείων που λείπουν από τη στήλη Age and Cabin. Έτσι, τα δεδομένα που λείπουν από αυτές τις στήλες μπορούν να ταξινομηθούν ως MAR ή Λείπουν τυχαία.

Ελπίζω να είστε σαφείς σχετικά με τον τρόπο ανάλυσης των τιμών που λείπουν. Στη συνέχεια, θα προχωρήσω στη συζήτηση για τους διαφορετικούς τρόπους χειρισμού αυτών των δεδομένων που λείπουν.

Πτώση σειρών με τιμές που λείπουν

Είναι μια απλή μέθοδος, όπου ρίχνουμε όλες τις γραμμές που έχουν τυχόν ελλείπουσες τιμές που ανήκουν σε μια συγκεκριμένη στήλη. Όσο εύκολο κι αν είναι αυτό, έρχεται με ένα τεράστιο μειονέκτημα. Μπορεί να καταλήξετε να χάσετε ένα τεράστιο κομμάτι των δεδομένων σας. Αυτό θα μειώσει το μέγεθος του συνόλου δεδομένων σας και θα κάνει τις προβλέψεις του μοντέλου σας προκατειλημμένες. Θα πρέπει να το χρησιμοποιήσετε μόνο όταν ο αριθμός των τιμών που λείπουν είναι πολύ μικρότερος.

Για παράδειγμα, η στήλη "Επιβιβάστηκε" έχει μόλις 2 τιμές που λείπουν. Έτσι, μπορούμε να ρίξουμε γραμμές όπου λείπει αυτή η στήλη. Ακολουθήστε το παρακάτω απόσπασμα κώδικα.

print ('Dataset before:', len (train)) train.dropna (subset = ['Embarked'], how = 'any', inplace = True) print ('Dataset after:', len (train)) print ( 'τιμές που λείπουν:', τρένο ['Επιβιβάστηκε']. isnull (). άθροισμα ())
Σύνολο δεδομένων πριν: 891 Σύνολο δεδομένων μετά: 889 τιμές που λείπουν: 0

Φανταστείτε αν κάνατε το ίδιο για τη στήλη "Ηλικία". Θα χάσετε το 77% των δεδομένων σας!

Πτώση στηλών

Όταν μια στήλη έχει μεγάλες τιμές που λείπουν, δεν έχει νόημα να καταλογίσουμε τις τιμές με τα λιγότερα διαθέσιμα αληθινά δεδομένα που έχουμε. Έτσι, όταν οποιαδήποτε στήλη έχει πάνω από 80% των τιμών που λείπουν, μπορείτε απλώς να την αποθέσετε από την ανάλυσή σας. Στην περίπτωσή μας, το 'Cabin' έχει 77% δεδομένα που λείπουν, οπότε μπορείτε να επιλέξετε να εγκαταλείψετε αυτήν τη στήλη.

Βεβαιωθείτε ότι η στήλη που έχει πέσει δεν είναι καθοριστική για την ανάλυσή σας. Εάν ναι, θα πρέπει να προσπαθήσετε να λάβετε περισσότερα δεδομένα και στη συνέχεια να καταλογίσετε τις τιμές που λείπουν.

Καταλογισμός για συνεχή μεταβλητή

τρένο [«Ηλικία»] [: 10]
0 22.0 1 38.0 2 26.0 3 35.0 4 35.0 5 NaN 6 54.0 7 2.0 8 27.0 9 14.0 Όνομα: Ηλικία, τύπος τύπου: float64
τρένο [«Ηλικία»] = τρένο [«Ηλικία»]. αντικαταστήστε (np.NaN, τρένο [«Ηλικία»]. μέσος όρος ()) τρένο [«Ηλικία»] [: 10]
0 22.000000 1 38.000000 2 26.000000 3 35.000000 4 35.000000 5 29.699118 6 54.000000 7 2.000000 8 27.000000 9 14.000000 Όνομα: Ηλικία, τύπος: float64

Μπορείτε να δείτε ότι το 'NaN' αντικαταστάθηκε με 29.699 (ο υπολογισμένος μέσος όρος).

Ο μέσος καταλογισμός έχει ορισμένα μειονεκτήματα. Εάν τα δεδομένα έχουν πολύ άνιση κατανομή, με πολλές ακραίες τιμές, τότε ο μέσος όρος δεν θα αντικατοπτρίζει την πραγματική κατανομή των δεδομένων. Ο μέσος όρος επηρεάζεται σε μεγάλο βαθμό από ακραίες τιμές ή υπερβολικές τιμές. Έτσι, εάν τα δεδομένα δεν έχουν πολλές ακραίες τιμές και ακολουθούν σχεδόν κανονική κατανομή, χρησιμοποιήστε τον μέσο καταλογισμό

Καταλογισμός με διάμεσο

Οι τιμές που λείπουν από ένα συνεχές χαρακτηριστικό μπορούν να συμπληρωθούν με το μέσο όρο των υπόλοιπων μη μηδενικών τιμών. Το πλεονέκτημα του μέσου όρου είναι ότι δεν επηρεάζεται από τις ακραίες τιμές, σε αντίθεση με τον μέσο όρο. Ας το εφαρμόσουμε εδώ.

τρένο [«Ηλικία»] = τρένο [«Ηλικία»]. αντικαταστήστε (np.NaN, τρένο [«Ηλικία»]. διάμεσο ()) τρένο [«Ηλικία»] [: 10]

καταλογισμός με μέσο όρο

Μπορείτε να παρατηρήσετε ότι η μέση τιμή (28.0) έχει συμπληρωθεί αντί για τιμές NaN.

Ομοίως, μπορείτε επίσης να εκτελέσετε καταλογισμό λειτουργίας. Γενικά, η εισαγωγή με τη λειτουργία είναι δημοφιλής για κατηγορικές τιμές που λείπουν. Θα το καλύψω σε βάθος σε επόμενη ενότητα

Πρόβλεψη των τιμών που λείπουν με παλινδρόμηση

Αντί να συμπληρώσουμε μια μεσαία ή μέση τιμή σε όλα τα μέρη, τι γίνεται αν μπορούμε να τις προβλέψουμε με τη βοήθεια άλλων μεταβλητών που έχουμε;

Ναί! Μπορούμε να χρησιμοποιήσουμε τις δυνατότητες με μη μηδενικές τιμές για να προβλέψουμε τις τιμές που λείπουν. Ένα μοντέλο παλινδρόμησης ή ταξινόμησης μπορεί να δημιουργηθεί για την πρόβλεψη των τιμών που λείπουν. Ας το εφαρμόσουμε για τη στήλη «Ηλικία» του τιτανικού μας συνόλου δεδομένων.

Μπορούμε να επεξεργαστούμε τα δεδομένα για τη δημιουργία του μοντέλου. Η λειτουργία "Ηλικία" θα είναι η μεταβλητή -στόχος.

x_train: Οι γραμμές του συνόλου δεδομένων που έχουν την τιμή "Age" φιλτράρονται. Η «Εποχή» είναι στόχος x_test: Είναι η στήλη "Ηλικία" με μη μηδενικές τιμές

Η y_train θα έχει τα δεδομένα που λείπουν τιμές ηλικίας, τα οποία πρέπει να προβλεφθούν (y_pred)

εισαγωγή pandas ως pd data = pd.read_csv ('../ input/titanic/train.csv') data = data [["Survived", "Pclass", "Sex", "SibSp", "Parch", "Fare "," Age "]] data [" Sex "] = [1 if x ==" male "else 0 for x in data [" Sex "]] test_data = data [data [" Age "]. Isnull ()] data.dropna (inplace = True) x_train = data.drop ("Age", axis = 1) x_test = test_data.drop ("Age", axis = 1) y_train = data ["Age"]

Ας προσαρμόσουμε ένα μοντέλο γραμμικής παλινδρόμησης σε αυτά τα δεδομένα. Θα χρησιμοποιήσω τη βιβλιοθήκη sklearn εδώ.

από sklearn.linear_model import LinearRegression model = LinearRegression () model.fit (X_train, y_train) y_pred = model.predict (X_test)

Τώρα, έχουμε τις μηδενικές τιμές της στήλης Age που προβλέπονται στο y_pred.

Θα εκτυπώσω μερικά παραδείγματα της δοκιμαστικής εισόδου και της προβλεπόμενης εξόδου για καλύτερη κατανόησή σας.

εκτύπωση (x_test [: 10])
Survived Pclass Sex SibSp Parch Fare 5 0 3 1 0 0 8.4583 17 1 2 1 0 0 13.0000 19 1 3 0 0 0 7.2250 26 0 3 1 0 0 7.2250 28 1 3 0 0 0 7.8792 29 0 3 1 0 0 7.8958 31 1 1 0 1 0 146.5208 32 1 3 0 0 0 7.7500 36 1 3 1 0 0 7.2292 42 0 3 1 0 0 7.8958

Έτσι μεταφέρονται οι εισροές στο μοντέλο παλινδρόμησης. Ας δούμε τις προβλεπόμενες τιμές ηλικίας.

εκτύπωση (y_pred [: 10])
[29.07080066 30.10833306 22.44685065 29.08927347 22.43705181 29.07922599 32.43692984 22.43898701

Χουράι! Πήραμε τις αξίες.

Λείπουν τιμές στα κατηγορικά δεδομένα

Μέχρι τώρα, είδαμε πώς να αντιμετωπίζουμε τα αριθμητικά δεδομένα που λείπουν. Τι γίνεται αν τα δεδομένα λείπουν στην περίπτωση μιας κατηγορικής λειτουργίας; Για παράδειγμα, η λειτουργία "Καμπίνα" του συνόλου δεδομένων του Τιτανικού είναι κατηγορηματική. Εδώ, δεν μπορούμε να υπολογίσουμε το μέσο και το μέσο. Έτσι, μπορούμε να συμπληρώσουμε τις τιμές που λείπουν με τη λειτουργία ή την πιο συχνά εμφανιζόμενη κατηγορία/κατηγορία.

τρένο ['Cabin'] = τρένο ['Cabin']. fillna (τρένο ['Cabin']. value_counts (). index [0])

Όταν το ποσοστό των τιμών που λείπουν είναι μικρότερο, προτιμάται αυτή η μέθοδος. Δεν προκαλεί τεράστια απώλεια δεδομένων και είναι στατιστικά σχετικό.

Αλλά αν έχετε πολλές τιμές που λείπουν, τότε δεν έχει νόημα να καταλογίζετε με την πιο συχνή τάξη. Αντ 'αυτού, ας δημιουργήσουμε μια ξεχωριστή κατηγορία για τιμές που λείπουν, όπως "Άγνωστο" ή "Μη διαθέσιμο". Ο αριθμός των μαθημάτων θα αυξηθεί κατά ένα.

Όταν οι τιμές που λείπουν προέρχονται από στήλες κατηγορίας (συμβολοσειρά ή αριθμητικές), τότε οι τιμές που λείπουν μπορούν να αντικατασταθούν με την πιο συχνή κατηγορία. Εάν ο αριθμός των τιμών που λείπουν είναι πολύ μεγάλος τότε μπορεί να αντικατασταθεί με νέα κατηγορία.

τρένο ['Cabin'] = τρένο ['Cabin']. fillna ('Unknown') τρένο ['Cabin'] [: 10]

ΣΕΙΡΑ ΚΑΒΙΝΑΣ | γεμίστε na

Λειτουργεί καλά με ένα μικρό σύνολο δεδομένων. Αναιρεί επίσης την απώλεια δεδομένων προσθέτοντας μια μοναδική κατηγορία.

Πώς να χειριστείτε τις τιμές που λείπουν στα δεδομένα χρονικών σειρών;

Τα σύνολα δεδομένων όπου συλλέγονται πληροφορίες μαζί με χρονικές σημάνσεις με τακτικό τρόπο υποδηλώνονται ως δεδομένα χρονοσειρών. Εάν έχετε τιμές που λείπουν σε δεδομένα χρονικών σειρών, μπορείτε προφανώς να δοκιμάσετε οποιαδήποτε από τις παραπάνω μεθόδους. Υπάρχουν όμως και μερικές συγκεκριμένες μέθοδοι που μπορούν να χρησιμοποιηθούν εδώ.

Για να πάρετε μια ιδέα, θα δημιουργήσω ένα απλό ομοίωμα δεδομένων.

time = pd.date_range ("1/01/2021", περίοδοι = 10, freq = "W") df = pd.DataFrame (index = time); df ["Πωλήθηκαν μονάδες"] = [5.0,4.0, np.nan, np.nan, 1.0, np.nan, 3.0,6.0, np.nan, 2.0]; εκτύπωση (df)

πωλούνται μονάδες

Ας περάσουμε στις μεθόδους

Προώθηση-συμπλήρωση τιμών που λείπουν

Η τιμή της επόμενης σειράς θα χρησιμοποιηθεί για να συμπληρώσει την τιμή που λείπει. Το 'συμπληρώστε' σημαίνει 'εμπρός γέμισμα'. Είναι πολύ εύκολο να εφαρμοστεί. Απλώς πρέπει να περάσετε την παράμετρο "Method" ως "ffill" στη συνάρτηση fillna ().

forward_filled = df.fillna (method = 'ffill') print (forward_filled)

εμπρός γεμάτο

Συμπλήρωση προς τα πίσω τιμών που λείπουν

Εδώ, χρησιμοποιούμε την τιμή της προηγούμενης γραμμής για να συμπληρώσουμε την τιμή που λείπει. Το 'bfill' σημαίνει αντίστροφη πλήρωση. Εδώ, πρέπει να περάσετε το 'bfill' ως παράμετρο της μεθόδου.

backward_filled = df.fillna (μέθοδος = 'bfill') εκτύπωση (backward_filled)

γεμάτο backeard

Ελπίζω ότι μπορείτε να εντοπίσετε τη διαφορά και στις δύο περιπτώσεις με τις παραπάνω εικόνες.

Γραμμική παρεμβολή

Τα δεδομένα των χρονοσειρών έχουν πολλές παραλλαγές. Οι παραπάνω μέθοδοι υπολογισμού με χρήση συμπληρώσεων και εμπρός πλήρωσης δεν είναι η καλύτερη δυνατή λύση. Γραμμική παρεμβολή στη διάσωση!

Εδώ, οι τιμές γεμίζουν με αυξανόμενες ή μειωτικές τιμές. Είναι ένα είδος τεχνικής καταλογισμού, που προσπαθεί να σχεδιάσει μια γραμμική σχέση μεταξύ των σημείων δεδομένων. Χρησιμοποιεί τις μη μηδενικές τιμές που είναι διαθέσιμες για τον υπολογισμό των σημείων που λείπουν.

παρεμβολή = df.interpolate (limit_direction = "both") εκτύπωση (παρεμβολή)

Γραμμική παρεμβολή τιμών που λείπουν

Συγκρίνετε αυτές τις τιμές με την πλήρωση προς τα πίσω και προς τα εμπρός και ελέγξτε μόνοι σας τι είναι καλό!

Αυτοί είναι μερικοί βασικοί τρόποι χειρισμού τιμών που λείπουν σε δεδομένα χρονικών σειρών

Αλγόριθμοι ισχυροί έως τιμές που λείπουν

Υπάρχουν περιπτώσεις όπου κανένα από τα παραπάνω δεν λειτουργεί καλά. Ωστόσο, πρέπει να κάνετε μια ανάλυση. Στη συνέχεια, θα πρέπει να επιλέξετε αλγόριθμους που υποστηρίζουν τιμές που λείπουν. Το KNN (K πλησιέστεροι γείτονες) είναι ένας τέτοιος αλγόριθμος. Θα εξετάσει τις τιμές που λείπουν λαμβάνοντας την πλειοψηφία των Κ πλησιέστερων τιμών. Το τυχαίο δάσος είναι επίσης ισχυρό σε κατηγορικά δεδομένα με τιμές που λείπουν. Πολλοί αλγόριθμοι που βασίζονται σε δέντρα αποφάσεων όπως το XGBoost, το Catboost υποστηρίζουν δεδομένα με τιμές που λείπουν.

Συμπέρασμα

Συνοψίζοντας, το πρώτο βήμα είναι να διερευνήσετε τα δεδομένα και να μάθετε ποιες μεταβλητές έχουν δεδομένα που λείπουν, ποιο είναι το ποσοστό και σε ποια κατηγορία ανήκει. Μετά από αυτό, θα έχετε μια στρατηγική ιδέα για τις μεθόδους που θα μπορούσατε να δοκιμάσετε. Μια χρήσιμη συμβουλή είναι να δοκιμάσετε τον υπολογισμό με τον αλγόριθμο Κ πλησιέστερου γείτονα εκτός από ένα μοντέλο γραμμικής παλινδρόμησης. Υπάρχουν μερικές πιο πρόσφατες μέθοδοι που θα μπορούσατε να βρείτε σαν να χρησιμοποιείτε το Datawig ή τις μεθόδους εισαγωγής Hot-Deck εάν οι παραπάνω μέθοδοι δεν λειτουργούν.

Ελπίζω να σας άρεσε το διάβασμα.

Μπορείτε να συνδεθείτε μαζί μου στη διεύθυνση: [προστασία μέσω email]

Linkedin: προεπεξεργασία δεδομένων

Τα μέσα που εμφανίζονται σε αυτό το άρθρο δεν ανήκουν στο Analytics Vidhya και χρησιμοποιούνται κατά την κρίση του Συντάκτη.

Πηγή: https://www.analyticsvidhya.com/blog/2021/10/end-to-end-introduction-to-handling-missing-values/

Σφραγίδα ώρας:

Περισσότερα από Ανάλυση Vidhya