Tasarladığım bir algoritmada bir sonraki adımımın ne olması gerektiği konusunda yardıma ihtiyacım var.
NDA'lar nedeniyle fazla bir şey açıklayamıyorum, ancak genel ve anlaşılır olmaya çalışacağım.
Temel olarak, algoritmalarda birkaç adımdan sonra, bu var:
Sahip olduğum her müşteri ve bir ay boyunca yaptıkları etkinlikler için, ilk adımlar sırasında etkinlikleri birkaç kategoriye ayırdım (her müşteri, 1'den x'e 1 ila 25 arasında değişen kategorilere ayrılmış etkinliklere sahip olacak, genellikle ilk kategoriler diğerlerinden daha fazla etkinlik yoğunluğuna sahiptir).
Her kategori ve müşteri için, saatteki ayın olaylarını toplayan bir zaman serisi oluşturdum (bu olayların ne zaman yapıldığına dair kalıplar alıyorum). Ayrıca, bir ayın üzerindeki günlerin sayısına (30 gün) göre en az bir etkinlik gerçekleştiren birkaç normalleştirici değişken ve toplamda en az bir etkinlik içeren toplam gün boyunca en az bir etkinlik içeren gün sayısı kullanıyorum. olay (tüm kümeleri toplama). Birincisi bana müşterinin ay boyunca ne kadar aktif olduğunu, ikincisi ise kategoriyi diğerlerine göre ağırlıklandırıyor.
Son tablo şöyle görünür
|*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 ...
Zaman serisi değişkenleri, her bir belirli kategorideki günlük toplam olayların yüzdesidir (bu, her bir satır için tüm değişkenleri toplayan 1 olması gerektiği anlamına gelir). Bunun böyle yapılmasının nedeni, örneğin olayları olan 0 0 0 1 0
ve 1 1 1 2 1
tamamen farklı olan ve normale standardize olan bir zaman serisinin benzer sonuçlar vermesidir. Farklı kategoriler arasındaki eğriltme nedeniyle, zaman serisindeki değerleri diğerleriyle bağımsız olarak kontrol ediyorum.
Şimdi yapmam gereken bu kategorileri tanımlamaktır (unutmayın, 1'den x'e 1'den 25'e kadar herhangi bir sayı olabilir) 3 etikete: etiket A, etiket B ve Hiçbiri. Bu değişkenlere bakarak, hangi etikete ait olduklarını manuel olarak belirleyebilirim ve fikir, elimden geldiğince manuel olarak tanımlamak ve bundan öğrenmek ve hepsini tanımlamak için herhangi bir sınıflandırıcı algoritması kullanmaktır.
Benim fikrim masada çoklu lojistik regresyonlar kullanmaktı, ama zaman serisinin tüm değişkenleri birbiriyle ilişkilidir (çünkü birbirlerinin lineer bir kombinasyonu oldukları için) öklid kullanarak sadece zaman serileri üzerinde bir kümeleme algoritması kullanmam gerektiğini düşündüm. farklı modelleri sınıflandıracak ve lojistik regresyonda sonucu ve diğer iki normalleştirici değişkeni kullanabilecek mesafe.
Sahip olduğum diğer endişe, bu yaklaşımın her satırı diğerlerinden bağımsız olarak alması ve teorik olarak, her müşteri için sadece 0 veya 1 etiket A, 0 veya 1 etiket B olması ve geri kalanının Yok (başka bir tane) olması gerektiğidir. ipucu normalde Etiket A ve B'nin ilk kategoriler arasında olmasıdır, çünkü normalleştirme özelliklerine büyük ölçüde bağımlıdır (toplamın üzerinde günler Yüksek ise, Zaman Serisi Deseni'ne bağlı olarak satırın A veya B olması olasılığı yüksektir) .
Düzenleme: Bu artık bir endişe değil, ben sadece iki farklı lojistik regresyon gerçekleştireceğim, biri Tag A veya Diğer ve diğeri Tag B veya başka, sonuç olasılıkları ile her biri sadece en iyi seçebilirsiniz.
Veri kümesi çok büyük ve son algoritmanın SQL (Teradata'da) kullanılarak uygulanması gerekiyor, ancak lojistik regresyon katsayılarını veya kümelenmenin merkezlerini almak için bir örnek alıyorum ve R kullanıyorum.