मुझे एक एल्गोरिथ्म में मेरा अगला कदम क्या होना चाहिए, इस पर मुझे मदद चाहिए।
एनडीए के कारण, मैं ज्यादा खुलासा नहीं कर सकता, लेकिन मैं सामान्य और समझने की कोशिश करूंगा।
असल में, एल्गोरिदम में कई चरणों के बाद, मेरे पास यह है:
मेरे पास प्रत्येक ग्राहक के लिए, और एक महीने के दौरान होने वाली घटनाओं के लिए, पहले चरणों के दौरान मैंने घटनाओं को कई श्रेणियों में विभाजित किया है (प्रत्येक ग्राहक की घटनाओं को उन श्रेणियों में अलग कर दिया जाएगा जो 1 से x के बीच 1 से 25 के बीच x हो जाती हैं, आम तौर पर पहली श्रेणियों में दूसरों की तुलना में घटनाओं का घनत्व अधिक होता है)।
प्रत्येक श्रेणी और ग्राहक के लिए मैंने प्रति घंटे महीने की घटनाओं को एकत्रित करने के लिए एक समय श्रृंखला बनाई है (जब ये इवेंट हो रहे हैं तो पैटर्न मिलते हैं)। इसके अलावा, मैं एक महीने (30 दिन) की संख्या के आधार पर चर को सामान्य करने वाले एक जोड़े का उपयोग कर रहा हूं जो कि आदमी कम से कम एक घटना करता है, और कम से कम एक दिन के साथ कुल दिनों में कम से कम एक घटना के साथ दिनों की संख्या घटना (सभी समूहों को एकत्र करना)। पहला मुझे इस बात का अनुपात देता है कि ग्राहक महीने के दौरान कितना सक्रिय है, और दूसरा दूसरों के खिलाफ श्रेणी को मापता है।
अंतिम तालिका इस तरह दिखती है
|*Identifier*| *firstCat* | *feature1* | *feature2* | { *(TIME SERIES)* }
CustomerID | ClusterID | DaysOver30 | DaysOverTotal | Events9AM Events10AM ...
xx | 1 | 0,69 | 0,72 | 0,2 0,13 ...
xx | 2 | 0,11 | 0,28 | 0,1 0,45 ...
xy | 1 | 0,23 | 0,88 | 0,00 0,60 ...
xy | 2 | 0,11 | 0,08 | 1,00 0,00 ...
xy | 3 | 0,10 | 0,04 | 0,40 0,60 ...
समय श्रृंखला चर प्रत्येक विशिष्ट श्रेणी पर प्रति दिन की घटनाओं का कुल प्रतिशत है (इसका अर्थ है कि प्रत्येक चर को जोड़ने वाली प्रत्येक पंक्ति 1 होनी चाहिए)। ऐसा करने का कारण यह है क्योंकि उदाहरण के लिए घटनाओं के साथ एक समय श्रृंखला है 0 0 0 1 0
और 1 1 1 2 1
पूरी तरह से अलग हैं, और सामान्य करने के लिए मानकीकरण समान परिणाम देगा। और विभिन्न श्रेणियों के बीच उच्च तिरछा होने के कारण, मैं दूसरों के साथ स्वतंत्र रूप से समय श्रृंखला पर मूल्यों की जांच करता हूं।
अब मुझे इन श्रेणियों की पहचान करने की आवश्यकता है (याद रखें, वे 1 से x किसी भी संख्या में 1 से 25 तक x हो सकती हैं) 3 टैग में: टैग ए, टैग बी और उनमें से कोई भी नहीं। इन चरों को देखते हुए, मैं मैन्युअल रूप से पहचान सकता हूं कि वे किस टैग से संबंधित हैं, और विचार यह है कि मैन्युअल रूप से जितना संभव हो उतना मैं पहचान सकता हूं और उससे सीखने के लिए किसी भी क्लासिफायर एल्गोरिथ्म का उपयोग कर सकता हूं और उन सभी की पहचान कर सकता हूं।
मेरा विचार था कि टेबल पर कई लॉजिस्टिक रेजिस्ट्रेशन का उपयोग किया जाए, लेकिन टाइम सीरीज़ के सभी वेरिएबल परस्पर संबंधित हैं (चूंकि वे एक दूसरे के रैखिक संयोजन हैं), इसलिए मैंने सोचा कि मैं केवल यूक्लिडियन के साथ टाइम सीरीज़ पर एक क्लस्टरिंग एल्गोरिथ्म का बेहतर उपयोग करता हूं विभिन्न पैटर्नों को वर्गीकृत करने के लिए दूरी और परिणाम और लॉजिस्टिक रिग्रेशन में अन्य दो सामान्यीकृत चर का उपयोग करें।
मुझे जो दूसरी चिंता है, वह यह है कि यह दृष्टिकोण प्रत्येक पंक्ति को दूसरों से स्वतंत्र रूप से लेता है, और सिद्धांत रूप में, प्रत्येक ग्राहक के लिए केवल 0 या 1 टैग ए, 0 या 1 टैग बी होना चाहिए और उनमें से शेष कोई भी नहीं होना चाहिए (अन्य टिप यह है कि आम तौर पर टैग ए और बी पहली श्रेणियों के बीच होते हैं, क्योंकि सामान्यीकरण सुविधाओं पर अत्यधिक निर्भर है (यदि कुल दिन अधिक है, तो उच्च संभावना है कि पंक्ति ए या बी है, जो समय श्रृंखला पैटर्न पर निर्भर करती है) ।
संपादित करें: यह अब कोई चिंता का विषय नहीं है, मैं सिर्फ दो अलग-अलग लॉजिस्टिक रजिस्ट्रशन करूंगा, एक टैग ए या अन्य के लिए और दूसरा टैग बी या किसी अन्य के लिए, परिणाम संभावनाओं के साथ मैं केवल प्रत्येक का सबसे अच्छा चयन कर सकता हूं।
डेटासेट विशाल है और SQL (Teradata पर) का उपयोग करके अंतिम एल्गोरिथ्म को लागू करने की आवश्यकता है, लेकिन लॉजिस्टिक प्रतिगमन के गुणांक, या क्लस्टरिंग के केंद्रों को प्राप्त करने के लिए मुझे एक नमूना मिलता है और आर का उपयोग करता है।