विश्लेषकहरूले प्रायः आफ्नो कामको क्रममा डेटामा आउटलियरहरू भेट्छन्, जस्तै AB-परीक्षण विश्लेषणको क्रममा, भविष्यवाणी गर्ने मोडेलहरू सिर्जना गर्ने वा ट्र्याकिङ प्रवृत्तिहरू। निर्णयहरू सामान्यतया नमूना माध्यमा आधारित हुन्छन्, जुन आउटलियरहरूको लागि धेरै संवेदनशील हुन्छ र नाटकीय रूपमा मूल्य परिवर्तन गर्न सक्छ। त्यसकारण, सही निर्णय गर्न बाहिरीहरूलाई व्यवस्थापन गर्न महत्त्वपूर्ण छ।
असामान्य मानहरूसँग काम गर्नका लागि धेरै सरल र छिटो दृष्टिकोणहरू विचार गरौं।
कल्पना गर्नुहोस् कि तपाईंले प्राथमिक मेट्रिकको रूपमा औसत अर्डर मान प्रयोग गरेर प्रयोग विश्लेषण गर्न आवश्यक छ। मानौं कि हाम्रो मेट्रिकमा सामान्यतया सामान्य वितरण हुन्छ। साथै, हामीलाई थाहा छ कि परीक्षण समूहमा मेट्रिक वितरण नियन्त्रणमा भन्दा फरक छ। अर्को शब्दमा, नियन्त्रणमा वितरणको औसत 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))
NB जुन मेट्रिकलाई विचार गर्दा दुवै पक्षबाट बाहिरीहरू हुन सक्छ। यदि तपाईंको मेट्रिकमा एक तर्फबाट मात्र बाहिरीहरू हुन सक्छ भने, विधिहरू सजिलैसँग त्यस उद्देश्यका लागि परिवर्तन गर्न सकिन्छ।
सबै भन्दा सजिलो तरीका भनेको 5% प्रतिशत भन्दा पहिले र 95% प्रतिशत पछि सबै अवलोकनहरू काट्नु हो। यस अवस्थामा, हामीले कन्फर्मको रूपमा १०% जानकारी गुमायौं। जे होस्, वितरणहरू अधिक बनाइएको देखिन्छ, र नमूना क्षणहरू वितरण क्षणहरू नजिक छन्।
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% पर्सेन्टाइल प्लस एक-आधा बराबर हुन्छ। यहाँ, हामीले जानकारीको ०.७% मात्र गुमाउनेछौं। वितरणहरू प्रारम्भिक भन्दा बढी बनाइएको देखिन्छ। नमूना क्षणहरू वितरण क्षणहरूसँग अझ बढी बराबर छन्।
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]
हामीले यहाँ विचार गरेको दोस्रो विधि बुटस्ट्र्याप हो। यस दृष्टिकोणमा, माध्यलाई उप-नमुनाहरूको माध्यमको रूपमा निर्माण गरिएको छ। हाम्रो उदाहरणमा, नियन्त्रण समूहमा औसत 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())
सही निर्णय लिनको लागि बाहिरी पत्ता लगाउने र प्रशोधन गर्नु महत्त्वपूर्ण हुन्छ। अब, कम्तिमा तीन छिटो र सीधा दृष्टिकोणले तपाईंलाई विश्लेषण गर्नु अघि डाटा जाँच गर्न मद्दत गर्न सक्छ।
यद्यपि, यो याद गर्न आवश्यक छ कि पत्ता लगाइएका आउटलियरहरू असामान्य मानहरू र नवीनता प्रभावको लागि एक विशेषता हुन सक्छ। तर यो अर्को कथा हो :)