Saya perlu bantuan tentang apa yang harus menjadi langkah saya berikutnya dalam algoritma yang saya rancang.
Karena NDA, saya tidak bisa mengungkapkan banyak hal, tetapi saya akan mencoba menjadi generik dan dapat dimengerti.
Pada dasarnya, setelah beberapa langkah dalam algoritma, saya punya ini:
Untuk setiap pelanggan yang saya miliki, dan acara yang mereka lakukan selama sebulan, selama langkah pertama saya telah mengelompokkan acara menjadi beberapa kategori (setiap pelanggan akan memiliki acara yang dipisahkan menjadi kategori yang berubah dari 1 menjadi x menjadi x antara 1 hingga 25, umumnya kategori pertama memiliki lebih banyak rapat daripada yang lain).
Untuk setiap kategori dan pelanggan saya telah membuat serangkaian waktu yang menggabungkan peristiwa bulan per jam (mendapatkan pola kapan peristiwa ini dilakukan). Saya juga menggunakan beberapa variabel normalisasi berdasarkan jumlah hari lebih dari sebulan (30 hari) bahwa orang itu melakukan setidaknya satu peristiwa, dan jumlah hari dengan setidaknya satu peristiwa atas total hari dengan setidaknya satu acara (menggabungkan semua cluster). Yang pertama memberi saya rasio seberapa aktif pelanggan selama bulan itu, dan yang kedua menimbang kategori terhadap yang lain.
Tabel terakhir terlihat seperti ini
|*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 ...
Variabel deret waktu adalah persentase dari total peristiwa per hari pada setiap kategori tertentu (ini berarti bahwa per setiap baris yang menjumlahkan semua variabel harus 1). Alasan melakukannya seperti itu adalah karena misalnya deret waktu dengan peristiwa 0 0 0 1 0
dan 1 1 1 2 1
sangat berbeda, dan standarisasi normal akan memberikan hasil yang sama. Dan karena kemiringan yang tinggi antara kategori yang berbeda, saya memeriksa nilai pada deret waktu secara independen dengan yang lain.
Yang perlu saya lakukan sekarang adalah mengidentifikasi kategori-kategori ini (ingat, mereka dapat dari 1 hingga x menjadi angka dari 1 hingga 25) menjadi 3 tag: tag A, tag B dan Tidak Ada dari Mereka. Melihat variabel-variabel ini saya dapat secara manual mengidentifikasi tag milik mereka, dan idenya adalah untuk mengidentifikasi secara manual sebanyak yang saya bisa dan menggunakan algoritma classifier apa pun untuk belajar darinya dan mengidentifikasi semuanya.
Ide saya adalah menggunakan beberapa regresi logistik di atas meja, tetapi semua variabel dari deret waktu berkorelasi (karena mereka adalah kombinasi linear satu sama lain), jadi saya pikir saya lebih baik menggunakan algoritma pengelompokan hanya dari deret waktu menggunakan euclidean jarak untuk mengkategorikan pola yang berbeda dan menggunakan hasil dan dua variabel normalisasi lainnya dalam regresi logistik.
Kekhawatiran lain yang saya miliki adalah bahwa pendekatan ini mengambil setiap baris secara independen dari yang lain, dan secara teori, untuk setiap pelanggan hanya boleh ada 0 atau 1 tag A, 0 atau 1 tag B dan sisanya harus tidak ada (yang lain tip adalah bahwa biasanya Tag A dan B berada di antara kategori pertama, karena sangat tergantung pada fitur normalisasi (jika hari-hari di atas total adalah Tinggi, ada kemungkinan tinggi bahwa barisnya adalah A atau B, tergantung pada Pola Rangkaian Waktu) .
Sunting: Ini bukan lagi masalah, saya hanya akan melakukan dua regresi logistik yang berbeda, satu untuk Tag A atau Other dan satu lagi untuk Tag B atau yang lain, dengan probabilitas hasil saya hanya dapat memilih yang terbaik dari masing-masing.
Dataset sangat besar dan algoritma terakhir perlu diterapkan menggunakan SQL (pada Teradata), tetapi untuk mendapatkan koefisien regresi logistik, atau pusat-pusat pengelompokan saya mendapatkan sampel dan menggunakan R.