विसंगतियों का पता लगाना
Type: Build
Language:पायथन
Prerequisites: Phase 2, Lessons 01-09
Time: ~75 minutes
सीखने के लक्ष्य
- Z-स्कोर, IQR और आइसोलेशन वन विसंगतियों का पता लगाने के तरीकों को खरोंच से लागू करें
- बिंदु, संदर्भ और सामूहिक विसंगतियों के बीच अंतर करें और प्रत्येक के लिए उपयुक्त पता लगाने की विधि चुनें
- समझाएं कि क्यों विसंगतियों की पहचान को विसंगतियों को वर्गीकृत करने के बजाय सामान्य डेटा का मॉडलिंग के रूप में ढांचा लगाया गया है
- पर्यवेक्षण रहित विसंगतियों की पहचान की पर्यवेक्षण योग्य वर्गीकरण के साथ तुलना करें और नए विसंगतियों की कवरेज और सटीकता के बीच की तुलना का मूल्यांकन करें
समस्या
न्यूयॉर्क में दोपहर 2 बजे क्रेडिट कार्ड का उपयोग किया जाता है, फिर टोक्यो में दोपहर 2:05 बजे। एक कारखाने सेंसर 150 डिग्री पढ़ता है जब सामान्य रेंज 80-120 है। एक सर्वर प्रति सेकंड 50,000 अनुरोध भेजता है जब दैनिक औसत 200 है।
ये विसंगति हैं, उन्हें ढूंढना मायने रखता है धोखाधड़ी अरबों डॉलर लागत है उपकरण विफलता समय लागत है नेटवर्क घुसपैठ लागत डेटा
चुनौतीः आपने शायद ही कभी असामान्यता के उदाहरणों को लेबल किया है। धोखाधड़ी लेनदेन के 0.1% का प्रतिनिधित्व करती है। उपकरण विफलता साल में कुछ बार होती है। आप एक मानक वर्गीकरण को प्रशिक्षित नहीं कर सकते क्योंकि "अनोमेली" वर्ग में सीखने के लिए लगभग कुछ भी नहीं है। यहां तक कि अगर आपके पास कुछ लेबल हैं, तो आपने जो विसंगति देखी है, वे एकमात्र प्रकार नहीं हैं जिनका आप सामना करेंगे। कल की धोखाधड़ी योजना आज की तुलना में अलग दिखती है।
विसंगतियों का पता लगाने से समस्या उलट जाती है. क्या असामान्य है, इसके बजाय, क्या सामान्य है, सीखें। जो कुछ भी सामान्य से विचलित होता है, वह संदिग्ध है। यह बिना लेबल के काम करता है, नए प्रकार के विसंगतियों के अनुकूल होता है, और बड़े पैमाने पर डेटा सेट के लिए पैमाने पर होता है।
अवधारणा
विसंगतियों के प्रकार
सभी विसंगतियों एक ही नहीं हैंः
- Point anomalies.एक एकल डेटा बिंदु जो संदर्भ के बावजूद असामान्य है. 500 डिग्री का तापमान रीडिंग।$50,000 from an account that normally spends $50।
- Contextual anomalies.एक डेटा बिंदु जो संदर्भ के आधार पर असामान्य है 90 डिग्री का तापमान गर्मियों में सामान्य है, सर्दियों में असामान्य है। एक ही मूल्य, अलग संदर्भ।
- Collective anomalies.एक अनुक्रम डेटा बिंदुओं है कि एक समूह के रूप में असामान्य है, भले ही प्रत्येक व्यक्तिगत बिंदु सामान्य हो सकता है. पांच लॉगिन विफलता सामान्य है. पचास एक पंक्ति में एक क्रूर बल हमले है.
अधिकांश विधियों में बिंदु विसंगतियों का पता लगाना होता है। संदर्भ विसंगतियों को समय या स्थान सुविधाओं की आवश्यकता होती है। सामूहिक विसंगतियों को अनुक्रम-जागरूक विधियों की आवश्यकता होती है।
flowchart TD
A[Anomaly Types] --> B[Point Anomaly]
A --> C[Contextual Anomaly]
A --> D[Collective Anomaly]
B --> B1["Single unusual value<br/>Temperature: 500F"]
C --> C1["Unusual in context<br/>90F in January"]
D --> D1["Unusual sequence<br/>50 failed logins"]
style B fill:#fdd,stroke:#333
style C fill:#ffd,stroke:#333
style D fill:#fdf,stroke:#333अनियंत्रित फ्रेमिंग
मानक वर्गीकरण में, आपके पास दोनों वर्गों के लिए लेबल हैं। विसंगतियों का पता लगाने में, आपके पास आमतौर पर तीन स्थितियों में से एक हैः
- Fully unsupervised.आप सभी डेटा पर डिटेक्टर फिट और उम्मीद है कि विसंगतियों दुर्लभ है "सामान्य" मॉडल को भ्रष्ट नहीं करने के लिए पर्याप्त हैं।
- Semi-supervised.आप केवल सामान्य डेटा का एक साफ सेट है. आप इस साफ सेट पर फिट और बाकी सब कुछ स्कोर. यह सबसे मजबूत सेटअप जब संभव है.
- Weakly supervised.आपके पास कुछ लेबल किए गए विसंगतियों हैं. उन्हें मूल्यांकन के लिए उपयोग करें, प्रशिक्षण नहीं। बिना पर्यवेक्षण के प्रशिक्षित करें, फिर लेबल किए गए उपसमूह पर सटीकता / याद को मापें।
मुख्य अंतर्दृष्टिः विसंगतियों का पता लगाना वर्गीकरण से मौलिक रूप से अलग है. आप सामान्य डेटा के वितरण का मॉडल कर रहे हैं, न कि दो वर्गों के बीच निर्णय सीमा।
पर्यवेक्षित बनाम अनियंत्रितः व्यापार
यदि आपके पास असामान्यताओं का लेबल है, तो क्या आपको उन्हें प्रशिक्षण (निरीक्षण वर्गीकरण) के लिए या केवल मूल्यांकन (निरीक्षण रहित पता लगाने) के लिए उपयोग करना चाहिए?
Supervised (treat as classification):
- आप पहले देखा है कि विसंगतियों की सटीक प्रकार को पकड़ता है
- ज्ञात विसंगतियों के प्रकारों पर अधिक सटीकता
- पूरी तरह से उपन्यास विसंगति प्रकारों को याद करता है
- नए विसंगतियों के प्रकारों के उद्भव के समय पुनर्व्यवस्था के लिए आवश्यक है
- पर्याप्त असामान्य उदाहरणों की आवश्यकता होती है (अक्सर बहुत कम)
Unsupervised (model normal, flag deviations):
- सामान्य से कोई विचलन, नए प्रकार सहित पकड़े
- लेबल वाली असामान्यताओं की आवश्यकता नहीं है
- उच्च झूठी सकारात्मक दर (असामान्य हर चीज बुरी नहीं होती)
- वितरण शिफ्ट के लिए अधिक मजबूत
व्यवहार में, सर्वोत्तम प्रणालियों में दोनों ही शामिल हैंः व्यापक कवरेज के लिए अनियंत्रित पता लगाना, ज्ञात उच्च प्राथमिकता वाले विसंगतियों के प्रकार के लिए पर्यवेक्षित मॉडल, और अस्पष्ट मामलों के लिए मानव समीक्षा।
Z-Score विधि
सबसे सरल दृष्टिकोण. प्रत्येक विशेषता के औसत और मानक विचलन की गणना करें. औसत से k मानक विचलन से अधिक किसी भी बिंदु को चिह्नित करें।
textz_score = (x - mean) / std
anomaly if |z_score| > thresholdडिफ़ॉल्ट थ्रेश 3.0 है (99.7% सामान्य डेटा एक गाउसियन वितरण के लिए 3 मानक विचलन के भीतर आता है) ।
Strengths:सरल, तेज़, व्याख्या योग्य ("यह मान सामान्य से 4.5 मानक विचलन है") ।
Weaknesses:यह मानता है कि डेटा सामान्य रूप से वितरित किया जाता है। प्रशिक्षण डेटा में असाधारण के प्रति संवेदनशील (असामान्य औसत को बदलते हैं और एसटीडी को बढ़ाते हैं, जिससे उन्हें पता लगाना मुश्किल हो जाता है) मल्टीमोडल वितरण पर विफलता।
When it works well:एकल विशेषता निगरानी जहां डेटा लगभग घंटी के आकार में है सर्वर प्रतिक्रिया समय, विनिर्माण सहिष्णुता, स्थिर बेसलाइन के साथ सेंसर रीडिंग।
When it fails:मल्टी-क्लास्टर डेटा (दो कार्यालय स्थानों के साथ अलग-अलग बेसलाइन तापमान), विकृत डेटा (लेनदेन की मात्रा जहां $ 1000 दुर्लभ है लेकिन असामान्य नहीं), प्रशिक्षण सेट में असामान्य डेटा।
आईक्यूआर विधि
Z-स्कोर से अधिक मजबूत. औसत और मानक विचलन के बजाय अंतर-क्वार्टिल सीमा का उपयोग करता है.
Q1 = 25th percentile
Q3 = 75th percentile
IQR = Q3 - Q1
lower_bound = Q1 - factor * IQR
upper_bound = Q3 + factor * IQR
anomaly if x < lower_bound or x > upper_boundडिफ़ॉल्ट कारक 1.5 है।
Strengths:अप्रासंगिकता के लिए मजबूत (प्रतिशत चरम मानों से प्रभावित नहीं होते हैं) विकृत वितरण पर काम करता है। कोई सामान्यता धारणा नहीं है।
Weaknesses:केवल एकतरफा (प्रत्येक विशेषता पर स्वतंत्र रूप से लागू होता है) । विशेषताओं को एक साथ विचार करने पर ही असामान्य असामान्यताओं का पता नहीं लगा सकता है (एक बिंदु प्रत्येक विशेषता में व्यक्तिगत रूप से सामान्य हो सकता है लेकिन संयुक्त स्थान में असामान्य हो सकता है) ।
Practical note:IQR में 1.5 कारक बॉक्स ग्राफ में दाढ़ी के अनुरूप है। दाढ़ी के बाहर बिंदु संभावित विकृति हैं। 1.5 के बजाय 3.0 का उपयोग करने से डिटेक्टर अधिक रूढ़िवादी (कम झंडे, कम झूठे सकारात्मक) बनाता है। सही कारक झूठे अलार्म के लिए आपकी सहनशीलता पर निर्भर करता है।
अलगाव वन
मुख्य अंतर्दृष्टि: विसंगतिएं कम और अलग हैं। डेटा के यादृच्छिक विभाजन में, विसंगतियों को अलग करना आसान है -- उन्हें बाकी से अलग करने के लिए कम यादृच्छिक विभाजन की आवश्यकता होती है।
flowchart TD
A[All Data Points] --> B{Random Feature + Random Split}
B --> C[Left Partition]
B --> D[Right Partition]
C --> E{Random Feature + Random Split}
E --> F[Normal Point - deep in tree]
E --> G[More splits needed...]
D --> H["Anomaly - isolated quickly (short path)"]
style H fill:#fdd,stroke:#333
style F fill:#dfd,stroke:#333How it works:
- कई यादृच्छिक पेड़ (एक अलगाव वन) बनाएं
- प्रत्येक नोड पर, एक यादृच्छिक विशेषता और सुविधा के न्यूनतम और अधिकतम के बीच यादृच्छिक विभाजन मूल्य चुनें
- तब तक विभाजित करना जारी रखें जब तक कि प्रत्येक बिंदु अलग न हो जाए (अपने स्वयं के पत्ते में)
- सभी पेड़ों में विसंगतियों की औसत पथ लंबाई कम होती है
Why it works:सामान्य बिंदु घने क्षेत्रों में रहते हैं। अपने पड़ोसियों से एक को अलग करने के लिए कई यादृच्छिक विभाजन की आवश्यकता होती है। विसंगति दुर्लभ क्षेत्रों में रहती है। उन्हें अलग करने के लिए एक या दो यादृच्छिक विभाजन पर्याप्त हैं।
विसंगति स्कोर सभी पेड़ों में औसत पथ लंबाई पर आधारित है, जो एक यादृच्छिक द्विआधारी खोज पेड़ की अपेक्षित पथ लंबाई से सामान्य है:
score(x) = 2^(-average_path_length(x) / c(n))कहाँc(n)n नमूनों के लिए अपेक्षित पथ लंबाई है। 1 के पास स्कोर का अर्थ है विसंगति। 0.5 के पास स्कोर का अर्थ है सामान्य। 0 के पास स्कोर का अर्थ है बहुत सामान्य (घनता समूहों में गहराई) ।
Strengths:कोई वितरण परिकल्पना नहीं। उच्च आयामों में काम करता है। स्केल अच्छा (सॉब साइज में उपरेखीय क्योंकि प्रत्येक पेड़ एक उप-सॉब का उपयोग करता है) । मिश्रित विशेषता प्रकारों को संभालता है।
Weaknesses:घने क्षेत्रों में विसंगतियों के साथ संघर्ष (मास्किंग प्रभाव) । यादृच्छिक विभाजन कम प्रभावी होता है जब कई विशेषताएं अप्रासंगिक होती हैं।
Key hyperparameters:
n_estimatorsअधिक वृक्ष अधिक स्थिर अंक देते हैं लेकिन धीमी गणना होती है।max_samples: प्रति पेड़ के नमूने की संख्या. 256 मूल कागज में डिफ़ॉल्ट है. छोटे मानों से व्यक्तिगत पेड़ कम सटीक होते हैं लेकिन विविधता बढ़ जाती है. उप-सैंपलिंग है जो आइसोलेशन फॉरेस्ट तेजी से बनाता है - प्रत्येक पेड़ डेटा का एक छोटा अंश देखता है.contamination: विसंगतियों का अपेक्षित अंश. केवल सीमा निर्धारित करने के लिए प्रयोग किया जाता है. स्कोर को प्रभावित नहीं करता है।
स्थानीय आउटलियर फैक्टर (LOF)
LOF एक बिंदु के आसपास स्थानीय घनत्व की तुलना अपने पड़ोसियों के आसपास घनत्व से करता है। घने क्षेत्रों से घिरे एक दुर्लभ क्षेत्र में एक बिंदु असामान्य है।
How it works:
- प्रत्येक बिंदु के लिए, अपने निकटतम पड़ोसियों के लिए खोजें
- स्थानीय पहुंच घनत्व की गणना करें (गोरबार कितना घनत्वपूर्ण है)
- प्रत्येक बिंदु की घनत्व की तुलना उसके पड़ोसियों की घनत्व से करें
- यदि किसी बिंदु की घनत्व उसके पड़ोसियों की तुलना में बहुत कम है, तो यह एक असामान्य है
LOF score:
- LOF 1.0 के करीब का अर्थ है पड़ोसी के समान घनत्व (सामान्य)
- 1.0 से अधिक LOF का अर्थ है पड़ोसी की तुलना में कम घनत्व (संभावित रूप से असामान्य)
- LOF 1.0 से अधिक (जैसे, 2.0+) का अर्थ है कि घनत्व काफी कम (संभावित विसंगति)
"स्थानीय" भाग महत्वपूर्ण है. दो क्लस्टरों के साथ एक डेटा सेट पर विचार करेंः 1000 बिंदुओं का घना क्लस्टर और 50 बिंदुओं का एक दुर्लभ क्लस्टर। दुर्लभ क्लस्टर के किनारे पर एक बिंदु वैश्विक रूप से असामान्य नहीं है - इसमें 50 पड़ोसी हैं। लेकिन यह स्थानीय रूप से असामान्य है यदि इसके तत्काल पड़ोसी इससे अधिक घने हैं। LOF इस बारीकियों को कैप्चर करता है जो वैश्विक तरीकों से चूक जाते हैं।
Strengths:स्थानीय विसंगतियों का पता लगाता है (बिंदु जो अपने पड़ोस में असामान्य हैं, भले ही वे वैश्विक स्तर पर असामान्य न हों) । विभिन्न घनत्व के समूहों पर काम करता है।
Weaknesses:बड़े डेटासेट पर धीमा (O(n^2) साफ़ कार्यान्वयन के लिए। k के विकल्प के प्रति संवेदनशील। बहुत उच्च आयामों में अच्छी तरह से काम नहीं करता (आयामीता की शाप दूरी की गणना को प्रभावित करती है) ।
तुलना
| Method | Assumptions | Speed | Handles High Dims | Detects Local Anomalies |
|---|---|---|---|---|
| Z-score | Normal distribution | Very fast | Yes (per feature) | No |
| IQR | None (per feature) | Very fast | Yes (per feature) | No |
| Isolation Forest | None | Fast | Yes | Partially |
| LOF | Distance is meaningful | Slow | Poorly | Yes |
मूल्यांकन की चुनौतियां
विसंगतियों के डिटेक्टरों का मूल्यांकन वर्गीकरणकर्ताओं का मूल्यांकन करने से कठिन हैः
- Extreme class imbalance.0.1% विसंगतियों के साथ, सब कुछ के लिए "सामान्य" भविष्यवाणी 99.9% सटीकता देता है। सटीकता बेकार है।
- AUROC is misleading.भारी असंतुलन के साथ, AUROC भले ही मॉडल व्यावहारिक सीमाओं पर अधिकांश विसंगतियों को याद कर सकता है।
- Better metrics:Precision@k (शीर्ष k चिह्नित वस्तुओं में से, कितने वास्तविक विसंगतियों हैं), AUPRC (सटीक-पुनर्प्राप्त वक्र के तहत क्षेत्र), और एक निश्चित झूठी सकारात्मक दर पर वापस बुलाया।
flowchart LR
A[Raw Data] --> B[Train on Normal Data Only]
B --> C[Score All Test Data]
C --> D[Rank by Anomaly Score]
D --> E[Evaluate Top-K Flagged Items]
E --> F[Precision at K / AUPRC]
style A fill:#f9f,stroke:#333
style F fill:#9f9,stroke:#333विसंगतियों का पता लगाने की पाइपलाइन
व्यवहार में, विसंगतियों का पता लगाने इस कार्यप्रवाह का अनुसरण करता हैः
- Collect baseline data.आदर्श रूप से, एक ऐसी अवधि जहां आप जानते हैं कि कोई (या बहुत कम) विसंगति नहीं है।
- Feature engineering.कच्चे गुण और व्युत्पन्न गुण (रोलिंग सांख्यिकी, समय गुण, अनुपात) ।
- Train the detector.मूल डेटा पर फिट। मॉडल सीखता है कि "सामान्य" कैसा दिखता है।
- Score new data.प्रत्येक नए अवलोकन को एक असामान्यता स्कोर मिलता है।
- Threshold selection.यह एक व्यावसायिक निर्णय हैः उच्च सीमा का मतलब कम झूठी अलार्म है लेकिन अधिक याद किए गए विसंगतियों।
- Alert and investigate.फ्लैग किए गए अंक मानव समीक्षा या स्वचालित प्रतिक्रिया के लिए जाते हैं।
- Feedback collection.इस आंकड़े का उपयोग डिटेक्टर का मूल्यांकन करने और समय के साथ सीमा को समायोजित करने के लिए करें।
पाइपलाइन कभी "कर नहीं जाती है।" डेटा वितरण बदलते हैं, नए विसंगतियों के प्रकार सामने आते हैं, और सीमाओं को समायोजित करने की आवश्यकता होती है। विसंगतियों का पता लगाने को एक जीवित प्रणाली के रूप में व्यवहार करें, एक बार मॉडल नहीं।
इसे बनाओ
कोड में code/anomaly_detection.pyZ-स्कोर, IQR, और पृथक् वन को खरोंच से लागू करता है।
Z-Score डिटेक्टर
pythondef zscore_detect(X, threshold=3.0):
mean = X.mean(axis=0)
std = X.std(axis=0)
std[std == 0] = 1.0
z = np.abs((X - mean) / std)
return z.max(axis=1) > thresholdसरल और वेक्टरलाइज्ड। यदि कोई विशेषता सीमा से अधिक है तो एक बिंदु को ध्वजांकित करें।
आईक्यूआर डिटेक्टर
pythondef iqr_detect(X, factor=1.5):
q1 = np.percentile(X, 25, axis=0)
q3 = np.percentile(X, 75, axis=0)
iqr = q3 - q1
iqr[iqr == 0] = 1.0
lower = q1 - factor * iqr
upper = q3 + factor * iqr
outside = (X < lower) | (X > upper)
return outside.any(axis=1)शून्य से अलग वन
खरोंच से कार्यान्वयन अलग-अलग पेड़ बनाता है जो यादृच्छिक रूप से सुविधा स्थान को विभाजित करता हैः
pythonclass IsolationTree:
def __init__(self, max_depth):
self.max_depth = max_depth
def fit(self, X, depth=0):
n, p = X.shape
if depth >= self.max_depth or n <= 1:
self.is_leaf = True
self.size = n
return self
self.is_leaf = False
self.feature = np.random.randint(p)
x_min = X[:, self.feature].min()
x_max = X[:, self.feature].max()
if x_min == x_max:
self.is_leaf = True
self.size = n
return self
self.threshold = np.random.uniform(x_min, x_max)
left_mask = X[:, self.feature] < self.threshold
self.left = IsolationTree(self.max_depth).fit(X[left_mask], depth + 1)
self.right = IsolationTree(self.max_depth).fit(X[~left_mask], depth + 1)
return selfकिसी बिंदु को अलग करने के लिए पथ की लंबाई उसके विसंगति स्कोर को निर्धारित करती है। कम पथ का अर्थ है अधिक विसंगति।
IsolationForestवर्ग कई पेड़ों को लपेटता हैः
pythonclass IsolationForest:
def __init__(self, n_estimators=100, max_samples=256, seed=42):
self.n_estimators = n_estimators
self.max_samples = max_samples
def fit(self, X):
sample_size = min(self.max_samples, X.shape[0])
max_depth = int(np.ceil(np.log2(sample_size)))
for _ in range(self.n_estimators):
idx = rng.choice(X.shape[0], size=sample_size, replace=False)
tree = IsolationTree(max_depth=max_depth)
tree.fit(X[idx])
self.trees.append(tree)
def anomaly_score(self, X):
avg_path = average path length across all trees
scores = 2.0 ** (-avg_path / c(max_samples))
return scoresसामान्यीकरण कारक c(n)यह n तत्वों के साथ द्विआधारी खोज पेड़ में असफल खोज की अपेक्षित पथ लंबाई है। यह बराबर है 2 H(n-1) - 2(n-1)/nकहाँHयह सामान्यीकरण सुनिश्चित करता है कि विभिन्न आकारों के डेटा सेटों के बीच स्कोर तुलनात्मक हैं।
डेमो परिदृश्य
कोड कई परीक्षण परिदृश्य उत्पन्न करता हैः
- Single cluster with outliers.केंद्र से दूर इंजेक्शन के साथ 2D Gaussian क्लस्टर. सभी तरीकों यहाँ काम करना चाहिए.
- Multimodal data.तीन समूहों के विभिन्न आकार और घनत्व के। समूहों के बीच बिंदु असामान्य हैं। Z-स्कोर संघर्ष क्योंकि प्रति विशेषता रेंज व्यापक हैं।
- High-dimensional data.50 विशेषताएं, लेकिन विसंगतियों उनमें से केवल 5 में भिन्न होते हैं। परीक्षण करता है कि क्या विधियों को विशेषताओं के एक उपसमूह में विसंगतियों का पता लगा सकता है।
प्रत्येक डेमो में सटीकता, रिकॉल, F1 और Precision@k का उपयोग करके सभी तरीकों की तुलना की जाती है।
इसका प्रयोग करें
sklearn के साथ (पुस्तिका कार्यान्वयन का उपयोग करके, खरोंच से नहीं):
pythonfrom sklearn.ensemble import IsolationForest
from sklearn.neighbors import LocalOutlierFactor
iso = IsolationForest(n_estimators=100, contamination=0.05, random_state=42)
iso.fit(X_train)
predictions = iso.predict(X_test)
lof = LocalOutlierFactor(n_neighbors=20, contamination=0.05, novelty=True)
lof.fit(X_train)
predictions = lof.predict(X_test)नोट contaminationयह सही ढंग से सेट करना मायने रखता है -- बहुत कम अपवादों को याद करता है, बहुत अधिक झूठी अलार्म बनाता है।
कोड में anomaly_detection.pyसमान डेटा पर स्क्लेयर के साथ खरोंच से कार्यान्वयन की तुलना करता है।
स्क्लेयरन प्रदूषण पैरामीटर
contaminationsklearn में पैरामीटर निरंतर विसंगति स्कोर को द्विआधारी भविष्यवाणियों में परिवर्तित करने के लिए सीमा निर्धारित करता है। यह अंतर्निहित स्कोर को नहीं बदलता है।
pythoniso_5 = IsolationForest(contamination=0.05)
iso_10 = IsolationForest(contamination=0.10)दोनों एक ही विसंगति स्कोर का उत्पादन.iso_5शीर्ष 5% को चिह्नित करता है जबकि iso_10यदि आप वास्तविक विसंगति दर नहीं जानते हैं (आप आमतौर पर नहीं करते हैं), तो प्रदूषण को "स्वचालित" पर सेट करें और सीधे कच्चे स्कोर के साथ काम करें। झूठे सकारात्मक और झूठे नकारात्मक के बीच लागत के बाजी के आधार पर अपनी सीमा निर्धारित करें।
एक श्रेणी का एसवीएम
एक वर्ग एसवीएम एक उच्च आयामी सुविधा अंतरिक्ष में सामान्य डेटा के आसपास एक सीमा फिट करता है (कर्नल ट्रिक का उपयोग करके) ।
pythonfrom sklearn.svm import OneClassSVM
oc_svm = OneClassSVM(kernel="rbf", gamma="auto", nu=0.05)
oc_svm.fit(X_train)
predictions = oc_svm.predict(X_test)nuएक वर्ग एसवीएम छोटे से मध्यम डेटा सेट पर अच्छा काम करता है लेकिन बहुत बड़े डेटा के लिए स्केल नहीं करता है (कर्नल मैट्रिक्स चतुर्भुज बढ़ता है) ।
ऑटोकोडर दृष्टिकोण (पूर्वावलोकन)
ऑटोकोडर तंत्रिका नेटवर्क हैं जो डेटा को संपीड़ित और पुनर्निर्माण करना सीखते हैं। सामान्य डेटा पर प्रशिक्षण। परीक्षण के समय, विसंगतियों में उच्च पुनर्निर्माण त्रुटि होती है क्योंकि नेटवर्क ने केवल सामान्य पैटर्न को पुनर्निर्माण करना सीखा है।
यह चरण 3 (डीप लर्निंग) में शामिल है, लेकिन सिद्धांत एक ही हैः मॉडल क्या सामान्य है, चिह्नित क्या विचलित है।
विसंगतियों का पता लगाने के लिए एक साथ
जैसे कि एंसेंबल विधियों से वर्गीकरण में सुधार होता है (पढ़ें 11) , कई विसंगतियों के डिटेक्टरों को जोड़कर पता लगाने में सुधार होता है। सबसे सरल दृष्टिकोणः
- कई डिटेक्टर चलाएं (Z-स्कोर, IQR, आइसोलेशन फॉरेस्ट, LOF)
- प्रत्येक डिटेक्टर के स्कोर को [0, 1] तक सामान्य करें
- सामान्यीकृत स्कोर का औसत
- औसत स्कोर पर सीमा से ऊपर के फ्लैग अंक
यह गलत सकारात्मकता को कम करता है क्योंकि विभिन्न विधियों में अलग-अलग विफलता मोड होते हैं। चारों विधियों द्वारा चिह्नित एक बिंदु लगभग निश्चित रूप से विसंगति है। केवल एक द्वारा चिह्नित एक बिंदु उस विधि का एक विचित्र हो सकता है।
अधिक परिष्कृत इकाइयां प्रत्येक डिटेक्टर का वजन उसके अनुमानित विश्वसनीयता (यदि उपलब्ध हो तो ज्ञात विसंगतियों के साथ सत्यापन सेट पर मापा गया) द्वारा करती हैं।
उत्पादन विचार
- Threshold drift.डेटा वितरण के साथ, एक निश्चित सीमा अप्रचलित हो जाती है।
- Alert fatigue.बहुत सारे झूठे अलार्म और ऑपरेटर ध्यान देना बंद कर देते हैं। उच्च सीमा (कम, अधिक विश्वसनीय अलार्म) के साथ शुरू करें और विश्वास के निर्माण के रूप में इसे कम करें।
- Ensemble approach.उत्पादन में, कई डिटेक्टरों को जोड़ें। एक बिंदु को केवल तभी चिह्नित करें जब कई विधियां सहमत हों कि यह असामान्य है। यह झूठे सकारात्मक को काफी कम करता है।
- Feature engineering.कच्चे फीचर्स शायद ही कभी पर्याप्त होते हैं। रोलिंग सांख्यिकी, अनुपात, समय-से-पिछले घटना, और डोमेन-विशिष्ट सुविधाओं को जोड़ें। एक अच्छी सुविधा डिटेक्टर के चयन से अधिक मायने रखती है।
- Feedback loop.जब ऑपरेटर चिह्नित वस्तुओं की जांच करते हैं और उन्हें पुष्टि या अस्वीकार करते हैं, तो उन्हें सिस्टम में वापस खिलाएं। समय के साथ लेबल किए गए डेटा को इल्यूवेट करने और डिटेक्टर को बेहतर बनाने के लिए एकत्र करें।
इसे भेजें
इस पाठ से उत्पन्न होता हैः
outputs/skill-anomaly-detector.md-- सही डिटेक्टर चुनने के लिए निर्णय लेने की क्षमताcode/anomaly_detection.py- Z-स्कोर, IQR, और स्कूलर तुलना के साथ शून्य से अलग वन
एक सीमा चुनना
अनियमितता स्कोर निरंतर है. आपको द्विआधारी निर्णय लेने के लिए एक सीमा की आवश्यकता है. यह एक व्यावसायिक निर्णय है, एक तकनीकी नहीं है.
दो परिस्थितियों पर विचार करें:
- Fraud detection.धोखाधड़ी को याद करना महंगा है (चार्जबैक, ग्राहक का विश्वास) झूठे अलार्मों की जांच करने के लिए मानव विश्लेषक को 5 मिनट का खर्च आता है। अधिक धोखाधड़ी को पकड़ने के लिए सीमा को कम रखें, अधिक झूठे अलार्म स्वीकार करें।
- Equipment maintenance.झूठी अलार्म का अर्थ है अनावश्यक बंद लागत$50,000. A missed failure means a $500,000 मरम्मत. इन लागतों को संतुलित करने के लिए सीमा निर्धारित करें.
दोनों ही मामलों में, इष्टतम सीमा गलत सकारात्मक और गलत नकारात्मक के बीच लागत अनुपात पर निर्भर करती है। विभिन्न सीमाओं पर सटीकता और याद दिलाना, लागत फ़ंक्शन को ओवरलैप करना और न्यूनतम लागत बिंदु चुनना।
उत्पादन के लिए स्केलिंग
उत्पादन में वास्तविक समय में विसंगतियों का पता लगाने के लिएः
- Batch training, online scoring.हाल के सामान्य आंकड़ों पर मॉडल को नियमित रूप से (दैनिक, साप्ताहिक) प्रशिक्षित करें। प्रत्येक नए अवलोकन के आने के साथ स्कोर करें।
- Feature computation must match.यदि आप 30 दिनों से अधिक समय के लिए रॉलिंग सांख्यिकी के साथ प्रशिक्षित हैं, तो आपको एक नए अवलोकन के लिए सुविधाओं की गणना करने के लिए 30 दिनों के इतिहास की आवश्यकता है। आवश्यक इतिहास बफर करें।
- Score distribution monitoring.समय के साथ विसंगति स्कोर के वितरण का ट्रैक करें. यदि मध्य स्कोर ऊपर की ओर बढ़ता है, तो या तो डेटा बदल रहा है या मॉडल पुराना है।
- Explainability.जब आप किसी विसंगति को चिह्नित करते हैं, तो बताएं कि क्यों। Z-स्कोरः "गुण X सामान्य से 4.2 मानक विचलन है।" अलगाव वनः "यह बिंदु औसतन 3.1 विभाजन में अलग किया गया था (सामान्य अंक 8.5 लेते हैं) ।"
व्यायाम
- Threshold tuning.Z-स्कोर डिटेक्टर को 0.5 के चरणों में 1.0 से 5.0 तक के सीमाओं के साथ चलाएं। प्रत्येक सीमा पर सटीकता और याद रखें। आपके डेटा के लिए सबसे अच्छा बिंदु कहां है?
- Multivariate anomalies.2D डेटा बनाएं जहां प्रत्येक विशेषता व्यक्तिगत रूप से सामान्य दिखती है, लेकिन संयोजन असामान्य है (उदाहरण के लिए, मुख्य क्लस्टर विकर्ण से दूर बिंदु) । दिखाएं कि प्रति विशेषता Z-स्कोर इन को याद करता है लेकिन अलगाव वन उन्हें पकड़ता है।
- LOF from scratch.k- निकटतम पड़ोसियों का उपयोग करके स्थानीय आउटलिअर कारक को लागू करें। उसी डेटा पर sklearn के स्थानीय आउटलिअर कारक की तुलना करें। k=10 और k=50 का उपयोग करें - k का चयन परिणामों को कैसे प्रभावित करता है?
- Streaming anomaly detection.स्ट्रीमिंग सेटिंग में काम करने के लिए Z-स्कोर डिटेक्टर को संशोधित करेंः नए बिंदुओं के आने के साथ चल रहे औसत और भिन्नता को अपडेट करें (वेल्फोर्ड का ऑनलाइन एल्गोरिथ्म) । एक ही डेटा पर बैच Z-स्कोर की तुलना करें।
- Real-world evaluation.ज्ञात असामान्यताओं के साथ एक डेटासेट लें (जैसे, कैगले से क्रेडिट कार्ड धोखाधड़ी) सटीकता@100, सटीकता@500 और AUPRC का उपयोग करके सभी चार तरीकों का मूल्यांकन करें। कौन सी विधि सबसे अच्छी तरह से काम करती है? क्यों?
प्रमुख शर्तें
| Term | What people say | What it actually means |
|---|---|---|
| Anomaly | "Outlier, unusual point" | A data point that deviates significantly from the expected pattern of normal data |
| Point anomaly | "A single weird value" | An individual observation that is unusual regardless of context |
| Contextual anomaly | "Normal value, wrong context" | An observation that is unusual given its context (time, location, etc.) but might be normal in another context |
| Isolation Forest | "Random splits to find outliers" | An ensemble of random trees that isolates anomalies with fewer splits than normal points |
| Local Outlier Factor | "Compare density to neighbors" | A method that flags points whose local density is much lower than their neighbors' density |
| Z-score | "Standard deviations from mean" | (x - mean) / std, measuring how far a point is from the center in units of standard deviation |
| IQR | "Interquartile range" | Q3 - Q1, measuring the spread of the middle 50% of data, used for robust outlier detection |
| Contamination | "Expected fraction of anomalies" | A hyperparameter telling the detector what proportion of the data it should flag as anomalous |
| Precision@k | "Of the top k flags, how many are real" | Precision computed on only the k most suspicious points, useful for imbalanced anomaly detection |
| AUPRC | "Area under precision-recall curve" | A metric that summarizes precision-recall performance across all thresholds, better than AUROC for imbalanced data |
आगे पढ़ना
- Liu et al., Isolation Forest (2008)-- मूल आइसोलेशन फॉरेस्ट पेपर
- Breunig et al., LOF: Identifying Density-Based Local Outliers (2000)-- मूल LOF पेपर
- scikit-learn Outlier Detection docs-- सभी स्क्लेयरन विसंगति डिटेक्टरों का अवलोकन
- Chandola et al., Anomaly Detection: A Survey (2009)-- विसंगतियों का पता लगाने के तरीकों का व्यापक सर्वेक्षण
- Goldstein and Uchida, A Comparative Evaluation of Unsupervised Anomaly Detection Algorithms (2016)-- वास्तविक डेटा सेट पर 10 विधियों की अनुभवजन्य तुलना
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.