بے ضابطگی کا پتہ لگانے کی مختلف تکنیکوں کو سیکھنا

بے ضابطگی کا پتہ لگانے کی مختلف تکنیکوں کو سیکھنا

ماخذ نوڈ: 1867449

ہم نے اپنے ڈیٹا کو نارمل بنانے کے لیے سٹینڈرڈ اسکیلر کا استعمال کیا اور ایک سکیٹر گراف تیار کیا۔

اب ہم کلسٹرز کو پوائنٹس دینے کے لیے DBSCAN درآمد کریں گے۔ اگر یہ ناکام ہوجاتا ہے، تو یہ دکھائے گا -1.

اب ہمارے پاس نتائج ہیں، لیکن ہم کیسے چیک کریں گے کہ کون سی ویلیو کم سے کم، زیادہ سے زیادہ ہے اور کیا ہمارے پاس -1 ویلیو ہے؟ ہم کلسٹر میں سب سے چھوٹی ویلیو چیک کرنے کے لیے arg min ویلیو استعمال کریں گے۔

ہم نتیجہ سے چھ اقدار دیکھ سکتے ہیں جو -1 ہیں۔

آئیے اب ایک سکیٹر گراف پلاٹ کرتے ہیں۔

مندرجہ بالا طریقے جو ہم نے لاگو کیے ہیں وہ uni-variate outliers پر ہیں۔

ملٹی ویریٹس آؤٹ لیرز کا پتہ لگانے کے لیے، ہمیں ملٹی ویریٹ آؤٹ لیرز کو سمجھنے کی ضرورت ہے۔

مثال کے طور پر، ہم کار ریڈنگ لیتے ہیں۔ ہم نے اوڈومیٹر کے لیے دو ریڈنگ میٹر دیکھے ہیں، جو گاڑی کے چلنے کی رفتار کو ریکارڈ یا پیمائش کرتا ہے، اور دوسرا آر پی ایم ریڈنگ ہے جو گاڑی کے پہیے کی فی منٹ گردش کی تعداد کو ریکارڈ کرتا ہے۔

فرض کریں اوڈومیٹر 0-60 میل فی گھنٹہ اور 0-750 میں rpm کی حد میں دکھاتا ہے۔ ہم فرض کرتے ہیں کہ آنے والی تمام اقدار کا ایک دوسرے سے تعلق ہونا چاہیے۔ اگر اوڈومیٹر 50 کی رفتار دکھاتا ہے اور rpm 0 انٹیک دکھاتا ہے تو ریڈنگ غلط ہے۔ اگر اوڈومیٹر صفر سے زیادہ قدر دکھاتا ہے، تو اس کا مطلب ہے کہ کار چل رہی تھی، لہذا rpm کی قدریں زیادہ ہونی چاہئیں، لیکن ہمارے معاملے میں، یہ 0 کی قدر دکھاتا ہے۔ یعنی، ملٹی ویریٹ آؤٹ لیرز۔

C. Mahalanobis فاصلاتی طریقہ

DBSCAN میں، ہم نے euclidean فاصلے کی پیمائش کا استعمال کیا، لیکن اس معاملے میں، ہم Mahalanobis فاصلاتی طریقہ کے بارے میں بات کر رہے ہیں۔ ہم DBSCAN کے ساتھ Mahalanobis فاصلہ بھی استعمال کر سکتے ہیں۔

DBSCAN(eps=0.5, min_samples=3, metric='mahalanobis', metric_params={'V':np.cov(X)}, algorithm='brute', leaf_size=30, n_jobs=-1)

اقلیڈین ایک دوسرے سے جڑے ہوئے اداروں کے لیے نااہل کیوں ہے؟ Euclidean فاصلے دو پوائنٹس کے کتنے قریب ہیں اس کے بارے میں غلط اعداد و شمار نہیں ڈھونڈ سکتا یا دے گا۔

Mahalanobis طریقہ پوائنٹس اور تقسیم کے درمیان فاصلہ استعمال کرتا ہے جو صاف ڈیٹا ہے۔ یوکلیڈین فاصلہ اکثر دو پوائنٹس کے درمیان ہوتا ہے، اور اس کا زیڈ سکور x مائنس اوسط سے شمار ہوتا ہے اور معیاری انحراف سے تقسیم کیا جاتا ہے۔ مہالانوبس میں، زیڈ اسکور x مائنس ہے جو کوویریئنس میٹرکس سے تقسیم کیا جاتا ہے۔

لہذا، کوویریئنس میٹرکس سے تقسیم کرنے کا کیا اثر ہوتا ہے؟ اگر آپ کے ڈیٹاسیٹ میں متغیرات بہت زیادہ مربوط ہیں تو ہم آہنگی کی قدریں زیادہ ہوں گی۔

اسی طرح، اگر ہم آہنگی کی قدریں کم ہیں، تو فاصلہ نمایاں طور پر کم نہیں ہوتا ہے اگر ڈیٹا کو آپس میں منسلک نہیں کیا جاتا ہے۔ یہ اتنا اچھا کام کرتا ہے کہ یہ متغیرات کے مسائل کے پیمانے اور ارتباط دونوں کو حل کرتا ہے۔

ضابطے

ڈیٹا سیٹ سے لیا جا سکتا ہے۔ Anomaly-/caret.csv at main · aster28/Anomaly- (github.com)

df = pd.read_csv('caret.csv').iloc[:, [0,4,6]] df.head()

ہم نے فنکشن کی دوری کو x= None، data= None، اور Covariance = None کے طور پر بیان کیا۔ فنکشن کے اندر، ہم نے ڈیٹا کا مطلب لیا اور وہاں ویلیو کی کوویرینس ویلیو کا استعمال کیا۔ بصورت دیگر، ہم ہم آہنگی میٹرکس کا حساب لگائیں گے۔ T کا مطلب ہے ٹرانسپوز۔

مثال کے طور پر، اگر صف کا سائز پانچ یا چھ ہے اور آپ چاہتے ہیں کہ یہ دو متغیر میں ہو، تو ہمیں میٹرکس کو منتقل کرنے کی ضرورت ہے۔

np.random.multivariate_normal(mean, cov, size = 5)
array([[ 0.0509196, 0.536808 ], [ 0.1081547, 0.9308906], [ 0.4545248, 1.4000731], [ 0.9803848, 0.9660610], [ 0.8079491 , 0.9687909]])
np.random.multivariate_normal(mean, cov, size = 5).T
array([[ 0.0586423, 0.8538419, 0.2910855, 5.3047358, 0.5449706], [ 0.6819089, 0.8020285, 0.7109037, 0.9969768, -0.7155739]])

ہم نے sp.linalg کا استعمال کیا، جو کہ لکیری الجبرا ہے اور اس کے مختلف افعال ہیں جو لکیری الجبرا پر انجام دینے کے لیے ہیں۔ اس میں میٹرکس کے الٹ جانے کے لیے inv فنکشن ہے۔ میٹرکس کی ضرب کے لیے NumPy ڈاٹ بطور ذریعہ۔

scipy کو sp def فاصلہ کے طور پر درآمد کریں linalg.inv(cov) left = np.dot(x_m, inv_cov) m_distance = np.dot(بائیں، x_m.T) واپسی m_distance.diagonal() df_g= df[['carat', 'depth', 'price' ]].head(50) df_g['m_distance'] = فاصلہ(x=df_g, data=df[['carat', 'depth', 'price']])

B. آؤٹ لیئر کا پتہ لگانے کے لیے ٹوکی کا طریقہ

ٹوکی طریقہ کو اکثر باکس اور وِسکر یا باکس پلاٹ کا طریقہ بھی کہا جاتا ہے۔

Tukey طریقہ اپر اور لوئر رینج کو استعمال کرتا ہے۔

بالائی رینج = 75 واں فیصد -k*IQR

نچلی رینج = 25 ویں فیصد + k* IQR

آئیے ہم اپنے ٹائٹینک ڈیٹا کو باکس پلاٹ کا استعمال کرتے ہوئے عمر کے متغیر کے ساتھ دیکھتے ہیں۔

sns.boxplot(titanic['age'].values)

ہم تصویر میں دیکھ سکتے ہیں کہ سیبورن کے ذریعے بنائے گئے باکس بلاٹ میں 55 اور 80 سال کی عمر کے درمیان بہت سے نقطے ظاہر ہوتے ہیں جو چوتھائی کے اندر نہیں ہوتے ہیں۔ ہم ایک فنکشن outliers_detect بنا کر نچلی اور اوپری رینج کا پتہ لگائیں گے۔

def outliers_detect(x, k = 1.5): x = np.array(x).copy().astype(float) first = np.quantile(x, .25) تیسری = np.quantile(x, .75) # IQR کیلکولیشن iqr = تیسری - پہلی #Upper رینج اور لوئر رینج Lower = first - (k * iqr) upper = تیسری + (k * iqr) واپسی نچلا، اوپری
outliers_detect(ٹائٹینک['عمر']، k = 1.5)
(2.5، 54.5)

D. PyCaret کے ذریعے پتہ لگانا

ہم PyCaret کے ذریعے پتہ لگانے کے لیے وہی ڈیٹا سیٹ استعمال کریں گے۔

pycaret.anomaly درآمد سے * setup_anomaly_data = سیٹ اپ(df)

Pycaret ایک اوپن سورس مشین لرننگ ہے جو باہر جانے والوں کا پتہ لگانے کے لیے غیر زیر نگرانی لرننگ ماڈل کا استعمال کرتی ہے۔ اس میں pycaret میں ہی ڈیٹاسیٹ استعمال کرنے کے لیے ایک get_data طریقہ ہے، پتہ لگانے سے پہلے پری پروسیسنگ ٹاسک کے لیے سیٹ اپ، عام طور پر ڈیٹا فریم لیتا ہے لیکن اس میں بہت سی دوسری خصوصیات بھی ہوتی ہیں جیسے ignore_features وغیرہ۔

الگورتھم استعمال کرنے کے لیے دوسرے طریقے create_model۔ ہم سب سے پہلے Isolation Forest استعمال کریں گے۔

ifor = create_model("iforest") plot_model(ifor) ifor_predictions = predict_model(ifor, data = df) print(ifor_predictions) ifor_anomaly = ifor_predictions[ifor_predictions["Anomaly"] == 1] پرنٹ کریں(ifor) ifor_anomaly.shape)

بے ضابطگی 1 آؤٹ لیرز کی نشاندہی کرتی ہے، اور بے ضابطگی 0 کوئی آؤٹ لیرز نہیں دکھاتی ہے۔

یہاں پیلا رنگ باہر کی طرف اشارہ کرتا ہے۔

اب ہم ایک اور الگورتھم دیکھتے ہیں، K Nearest Neighbours (KNN)

knn = create_model("knn") plot_model(knn) knn_pred = predict_model(knn, data = df) print(knn_pred) knn_anomaly = knn_pred[knn_pred["Anomaly"] == 1] knn_anomaly.head() knn_nomaly.head

اب ہم کلسٹرنگ الگورتھم استعمال کریں گے۔

clus = create_model("cluster") plot_model(clus) clus_pred = predict_model(clus, data = df) print(clus_pred) clus_anomaly = clus_predictions[clus_pred["Anomaly"] == 1] print(clus_anomaly) شکل

E. PyOD کے ذریعے بے ضابطگی کا پتہ لگانا

PyOD ملٹی ویریٹ ڈیٹا میں آؤٹ لیرز کا پتہ لگانے کے لیے ایک ازگر کی لائبریری ہے۔ یہ زیر نگرانی اور غیر زیر نگرانی سیکھنے دونوں کے لیے اچھا ہے۔

pyod.models.iforest سے IForest درآمد کریں pyod.models.knn سے KNN درآمد کریں 

ہم نے لائبریری اور الگورتھم درآمد کیا۔

pyod.utils.data سے درآمد generate_data سے pyod.utils.data درآمد کریں evaluate_print سے pyod.utils.example درآمد کریں visualize train= 300 test=100 contaminate = 0.1 X_train, X_test, y_train, y_test_test=genert_test = , n_features=2,contamination=contaminate,random_state=42)
cname_alg = 'KNN' # الگورتھم کا نام ہے K Nearest Neighbours c = KNN() c.fit(X_train) #algorithm Fit the algorithm y_trainpred = c.labels_ y_trainscores = c.decision_scores_ y_testpred = c.testcoresy() c.decision_function(X_test) print("Training Data:") evaluate_print(cname_alg, y_train, y_train_scores) print("Test Data:") evaluate_print(cname_alg, y_test, y_test_scores, X_test_scores, X_test_scores, X_test_scores, X_test_in, X_test_scores) y_trainpred,y_testpred, show_figure=True, save_figure=True)

ہم IForest الگورتھم استعمال کریں گے۔

fname_alg = 'IForest' # الگورتھم کا نام K Nearest Neighbours f = IForest() f.fit(X_train) # الگورتھم کو فٹ کریں y_train_pred = c.labels_ y_train_scores = c.decision_scores_ y_test_pred = c.decision_scores_ y_test_pred = c.decision_function(X_test) print("Training Data:") evaluate_print(fname_alg, y_train_pred, y_train_scores) print("Test Data:") evaluate_print(fname_alg, y_test_pred, y_fname, y_fname, X_test_pred, X_fname, X_test_pred y_train_pred,y_test_pred, show_figure=True, save_figure=True)

F. نبی کی طرف سے بے ضابطگی کا پتہ لگانا

ہم ٹائم سیریز کے ساتھ ہوائی مسافروں کا ڈیٹاسیٹ استعمال کریں گے۔ prophet/example_air_passengers.csv at main · aster28/prophet (github.com)

نبی سے نبی درآمد کریں نبی سے پیشن گوئی کرنے والے کو نبی سے درآمد کریں نبی ایم = نبی ()
data = pd.read_csv('air_pass.csv') data.head()
data.columns = ['ds', 'y'] data['y'] = np.where(data['y'] != 0, np.log(data['y']), 0)

y کالم کا لاگ کوئی منفی قدر کو قابل نہیں بناتا ہے۔ ہم نے اپنے ڈیٹا کو ٹرین، ٹیسٹ میں تقسیم کیا اور پیشین گوئی کو متغیر پیشین گوئی میں محفوظ کیا۔

ٹرین، ٹیسٹ = ٹرین_ٹیسٹ_اسپلٹ ', 'yhat', 'yhat_lower', 'yhat_upper']].copy() forcast['real']= data['y'] forcast['anomaly'] =42 forcast.loc[forcast['real'] > forcast['yhat_upper'], 'anomaly']=0 forcast.loc[forcast['real']< forcast['yhat_lower'], 'anomaly']=-1 forcast['imp']=1 in_range = forcast ['yhat_upper']-forcast['yhat_lower'] forcast.loc[forcast['anomaly']==0, 'imp'] = forcast['real']-forcast['yhat_upper']/in_range forcast.loc[ forcast['anomaly']==-1, 'imp']= forcast['yhat_lower']-forcast['real']/in_range میں واپسی کی پیش گوئی
پتہ لگانا (پیش گوئی)

ہم نے بے ضابطگی کو -1 کے طور پر لیا۔

نتیجہ

دیئے گئے ڈیٹاسیٹ میں آؤٹ لیرز کو تلاش کرنے کے عمل کو بے ضابطگی کا پتہ لگانے کا نام دیا جاتا ہے۔ آؤٹ لیرز ڈیٹا آبجیکٹ ہیں جو ڈیٹاسیٹ میں موجود آبجیکٹ کی باقی اقدار سے الگ ہیں اور عام طور پر برتاؤ نہیں کرتے ہیں۔

بے ضابطگی کا پتہ لگانے کے کام فاصلے پر مبنی اور کثافت پر مبنی کلسٹرنگ کے طریقے استعمال کر سکتے ہیں تاکہ کلسٹر کے طور پر آؤٹ لیرز کی شناخت کی جا سکے۔

ہم یہاں بے ضابطگی کا پتہ لگانے کے مختلف طریقوں پر تبادلہ خیال کرتے ہیں اور ٹائٹینک، ہوائی مسافروں اور کیریٹ کے تین ڈیٹا سیٹس پر موجود کوڈ کا استعمال کرتے ہوئے ان کی وضاحت کرتے ہیں۔

اہم نکات

1. Box-Whisker طریقہ استعمال کرتے ہوئے یا DBSCAN کے ذریعے آؤٹ لیرز یا بے ضابطگی کا پتہ لگایا جا سکتا ہے۔

2. Euclidean فاصلے کا طریقہ ان اشیاء کے ساتھ استعمال کیا جاتا ہے جن کا کوئی تعلق نہیں ہے۔

3. Mahalanobis طریقہ Multivariate outliers کے ساتھ استعمال کیا جاتا ہے۔

4. تمام اقدار یا پوائنٹس آؤٹ لئیر نہیں ہیں۔ کچھ شور ایسے ہوتے ہیں جو کوڑا کرکٹ ہونا چاہیے۔ آؤٹ لیرز درست ڈیٹا ہیں جنہیں ایڈجسٹ کرنے کی ضرورت ہے۔

5. ہم نے PyCaret کو مختلف الگورتھم استعمال کرکے آؤٹ لیرز کا پتہ لگانے کے لیے استعمال کیا جہاں بے ضابطگی ایک ہے، پیلے رنگوں میں دکھائی گئی ہے، اور جہاں آؤٹ لیئر 0 ہے وہاں کوئی آؤٹ لیئر نہیں ہے۔

6. ہم نے PyOD استعمال کیا، جو Python Outlier کا پتہ لگانے والی لائبریری ہے۔ اس میں 40 سے زیادہ الگورتھم ہیں۔ زیر نگرانی اور غیر زیر نگرانی تکنیک استعمال کی جاتی ہے۔

7. ہم نے نبی کا استعمال کیا اور فنکشن کا پتہ لگانے والوں کو آؤٹ لائن کرنے کے لیے ڈیفائن کیا۔

اس مضمون میں دکھایا گیا میڈیا Analytics ودھیا کی ملکیت نہیں ہے اور مصنف کی صوابدید پر استعمال ہوتا ہے۔

ٹائم اسٹیمپ:

سے زیادہ تجزیات ودھیا