Οι αναλυτές συχνά συναντούν ακραίες τιμές στα δεδομένα κατά τη διάρκεια της εργασίας τους, όπως κατά την ανάλυση AB-test, τη δημιουργία προγνωστικών μοντέλων ή την παρακολούθηση τάσεων. Οι αποφάσεις βασίζονται συνήθως στη μέση τιμή του δείγματος, η οποία είναι πολύ ευαίσθητη σε ακραίες τιμές και μπορεί να αλλάξει δραματικά την τιμή. Επομένως, είναι ζωτικής σημασίας να διαχειριστείτε τα ακραία για να λάβετε τη σωστή απόφαση.
Ας εξετάσουμε πολλές απλές και γρήγορες προσεγγίσεις για την εργασία με ασυνήθιστες τιμές.
Φανταστείτε ότι πρέπει να πραγματοποιήσετε μια ανάλυση πειράματος χρησιμοποιώντας μια μέση τιμή παραγγελίας ως κύρια μέτρηση. Ας πούμε ότι η μέτρησή μας έχει συνήθως κανονική κατανομή. Επίσης, γνωρίζουμε ότι η μετρική κατανομή στην ομάδα δοκιμής είναι διαφορετική από αυτή στον έλεγχο. Με άλλα λόγια, ο μέσος όρος της κατανομής στον έλεγχο είναι 10 και στη δοκιμή είναι 12. Η τυπική απόκλιση και στις δύο ομάδες είναι 3.
Ωστόσο, και τα δύο δείγματα έχουν ακραίες τιμές που παραμορφώνουν τη μέση τιμή του δείγματος και την τυπική απόκλιση του δείγματος.
import numpy as np N = 1000 mean_1 = 10 std_1 = 3 mean_2 = 12 std_2 = 3 x1 = np.concatenate((np.random.normal(mean_1, std_1, N), 10 * np.random.random_sample(50) + 20)) x2 = np.concatenate((np.random.normal(mean_2, std_2, N), 4 * np.random.random_sample(50) + 1))
Σημείωση ότι η εξέταση της μέτρησης θα μπορούσε να έχει ακραίες τιμές και από τις δύο πλευρές. Εάν η μέτρησή σας θα μπορούσε να έχει ακραίες τιμές μόνο από τη μία πλευρά, οι μέθοδοι θα μπορούσαν εύκολα να μετασχηματιστούν για αυτόν τον σκοπό.
Η ευκολότερη μέθοδος είναι να κόψετε όλες τις παρατηρήσεις πριν από το εκατοστημόριο 5% και μετά το εκατοστημόριο 95% . Σε αυτήν την περίπτωση, χάσαμε το 10% των πληροφοριών ως απάτη. Ωστόσο, οι κατανομές φαίνονται πιο σχηματισμένες και οι ροπές δείγματος είναι πιο κοντά στις ροπές κατανομής.
import numpy as np x1_5pct = np.percentile(x1, 5) x1_95pct = np.percentile(x1, 95) x1_cutted = [i for i in x1 if i > x1_5pct and i < x1_95pct] x2_5pct = np.percentile(x2, 5) x2_95pct = np.percentile(x2, 95) x2_cutted = [i for i in x2 if i > x2_5pct and i < x2_95pct]
Ένας άλλος τρόπος είναι να εξαιρεθούν παρατηρήσεις εκτός του συγκεκριμένου εύρους . Η χαμηλή ζώνη ισούται με το 25% εκατοστημόριο μείον το μισό του διατεταρτημορίου και η υψηλή ζώνη ισούται με το εκατοστημόριο 75% συν το μισό. Εδώ, θα χάσουμε μόνο το 0,7% των πληροφοριών. Οι διανομές φαίνονται πιο διαμορφωμένες από την αρχική. Οι ροπές δείγματος είναι ακόμη πιο ίσες με τις ροπές κατανομής.
import numpy as np low_band_1 = np.percentile(x1, 25) - 1.5 * np.std(x1) high_band_1 = np.percentile(x1, 75) + 1.5 * np.std(x1) x1_cutted = [i for i in x1 if i > low_band_1 and i < high_band_1] low_band_2 = np.percentile(x2, 25) - 1.5 * np.std(x2) high_band_2 = np.percentile(x2, 75) + 1.5 * np.std(x2) x2_cutted = [i for i in x2 if i > low_band_2 and i < high_band_2]
Η δεύτερη μέθοδος που εξετάσαμε εδώ είναι ένα bootstrap. Σε αυτή την προσέγγιση, ο μέσος όρος κατασκευάζεται σαν μέσος όρος υποδειγμάτων. Στο παράδειγμά μας, ο μέσος όρος στην ομάδα ελέγχου είναι 10,35 και η ομάδα δοκιμής είναι 11,78. Εξακολουθεί να είναι καλύτερο αποτέλεσμα σε σύγκριση με την πρόσθετη επεξεργασία δεδομένων.
import pandas as pd def create_bootstrap_samples( sample_list: np.array, sample_size: int, n_samples: int ): # create a list for sample means sample_means = [] # loop n_samples times for i in range(n_samples): # create a bootstrap sample of sample_size with replacement bootstrap_sample = pd.Series(sample_list).sample(n = sample_size, replace = True) # calculate the bootstrap sample mean sample_mean = bootstrap_sample.mean() # add this sample mean to the sample means list sample_means.append(sample_mean) return pd.Series(sample_means) (create_bootstrap_samples(x1, len(x1), 1000).mean(), create_bootstrap_samples(x2, len(x2), 1000).mean())
Ο εντοπισμός και η επεξεργασία των ακραίων τιμών είναι σημαντικές για τη λήψη της σωστής απόφασης. Τώρα, τουλάχιστον τρεις γρήγορες και απλές προσεγγίσεις θα μπορούσαν να σας βοηθήσουν να ελέγξετε τα δεδομένα πριν από την ανάλυση.
Ωστόσο, είναι σημαντικό να θυμόμαστε ότι οι ανιχνευόμενες ακραίες τιμές θα μπορούσαν να είναι ασυνήθιστες τιμές και ένα χαρακτηριστικό για το εφέ καινοτομίας. Αλλά είναι άλλη ιστορία :)