Ang mga analyst ay madalas na nakakaharap ng mga outlier sa data sa panahon ng kanilang trabaho, tulad ng sa panahon ng pagsusuri sa AB-test, paggawa ng mga predictive na modelo, o pagsubaybay sa mga trend. Karaniwang nakabatay ang mga desisyon sa sample mean, na napakasensitibo sa mga outlier at maaaring magbago nang malaki sa halaga. Kaya, napakahalaga na pamahalaan ang mga outlier upang makagawa ng tamang desisyon.
Isaalang-alang natin ang ilang simple at mabilis na diskarte para sa pagtatrabaho sa mga hindi pangkaraniwang halaga.
Isipin na kailangan mong magsagawa ng pagsusuri sa eksperimento gamit ang isang average na halaga ng order bilang pangunahing sukatan. Sabihin nating karaniwang may normal na distribusyon ang ating sukatan. Gayundin, alam namin na ang pamamahagi ng sukatan sa pangkat ng pagsubok ay iba sa kontrol. Sa madaling salita, ang ibig sabihin ng distribusyon sa kontrol ay 10, at sa pagsubok ay 12. Ang karaniwang paglihis sa parehong grupo ay 3.
Gayunpaman, ang parehong mga sample ay may mga outlier na skew sa sample na paraan at ang sample na standard deviation.
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))
NB na ang pagsasaalang-alang sa sukatan ay maaaring magkaroon ng mga outlier mula sa magkabilang panig. Kung ang iyong sukatan ay maaaring magkaroon lamang ng mga outlier mula sa isang panig, ang mga pamamaraan ay madaling mabago para sa layuning iyon.
Ang pinakamadaling paraan ay putulin ang lahat ng obserbasyon bago ang 5% percentile at pagkatapos ng 95% percentile . Sa kasong ito, nawala namin ang 10% ng impormasyon bilang isang con. Gayunpaman, ang mga pamamahagi ay mukhang mas nabuo, at ang mga sample na sandali ay mas malapit sa mga sandali ng pamamahagi.
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]
Ang isa pang paraan ay ang ibukod ang mga obserbasyon sa labas ng partikular na saklaw . Ang mababang banda ay katumbas ng 25% percentile minus isang kalahati ng interquartile range, at ang mataas na banda ay katumbas ng 75% percentile at kalahati. Dito, 0.7% lang ng impormasyon ang mawawala sa atin. Ang mga pamamahagi ay mukhang mas nabuo kaysa sa una. Ang mga sample na sandali ay mas katumbas ng mga sandali ng pamamahagi.
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]
Ang pangalawang paraan na isinasaalang-alang namin dito ay isang bootstrap. Sa diskarteng ito, ang ibig sabihin ay itinayo tulad ng isang mean ng mga subsample. Sa aming halimbawa, ang ibig sabihin sa control group ay katumbas ng 10.35, at ang test group ay 11.78. Ito ay isang mas mahusay na resulta kumpara sa karagdagang pagproseso ng data.
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())
Ang outlier detection at processing ay makabuluhan para sa paggawa ng tamang desisyon. Ngayon, hindi bababa sa tatlong mabilis at tuwirang diskarte ang maaaring makatulong sa iyo na suriin ang data bago ang pagsusuri.
Gayunpaman, mahalagang tandaan na ang mga natukoy na outlier ay maaaring hindi pangkaraniwang mga halaga at isang tampok para sa bagong epekto. Ngunit ito ay ibang kwento :)