Ders 02 / 09
Analitik Türleri
Aynı abone tablosuna sorulan 16 soru betimsel, tanısal, öngörücü ve önerici olarak ayrılıyor; cevaplanabilir soru sayısı iki karara göre 2 ile 7 arasında oynuyor. Türetilmiş alan var sayılınca 5 soru açılıyor, öngörücü soru için istenen geçmiş derinliği 3 dönemden 12 döneme çıkınca 2 soru kapanıyor. Önerici türün dört sorusu dört karar bileşiminin hiçbirinde açılmıyor, çünkü tabloda olan bitenin kaydı var, denenenin kaydı yok.
İçindekiler
Önceki ders tek bir soruyu ölçülebilir duruma getirdi: ağda kaç etkin abone var. Sorunun kendisi sorgulanmadı. Oysa aynı tabloya sorulabilecek sorular tek çeşit değildir ve çeşit değiştiğinde tablodan istenen şey de değişir. “Kaç abone var” sorusu kayıtta duranı özetler; “abone sayısı neden düştü” bir neden ister; “gelecek ay kaç abone olacak” bir tahmin ister; “hangi aboneye önce gidilmeli” bir eylemin sonucunu ister.
Bu ders dört çeşidi ayırır ve her çeşidin hangi veriyi istediğini ölçer. Ölçülen sayı, bir soru kümesinde eldeki veriyle cevaplanabilen soru sayısıdır. Bu sayının da bir tanımı vardır ve tanım iki karara bağlıdır; iki karar değiştiğinde aynı 16 soru üzerinden çıkan cevap sayısı 2 ile 7 arasında oynar.
- AK7. Eldeki küme önceki dersin abone tablosudur; yanına sayaç okumalarının son dört aylık özeti eklenmiştir. Geçmiş derinliği dört dönemdir. Küme de sorular da kurgudur.
- AK8. Soru kümesi 16 sorudan oluşur, her türden dördü.
- AK9. Bir soru cevaplanabilir sayılır: istediği her alan ya kümede durur ya türetilebilir, ve istediği geçmiş derinliği elde vardır. Cevabın doğru olup olmadığı ayrı bir sorudur; burada ölçülen şey verinin yeterliliğidir, cevabın niteliği değil.
- AK10. Türetilebilir alan diskte durmaz ama duran alanlardan hesaplanır. Hesabı bir karar ister: önceki dersin “hangi aboneler paydaya girer” sorusu her türetmede yeniden çıkar.
- AK11. İki karar ölçülür. Birincisi: türetilebilir alan “var” sayılır mı (sıkı okuma) yoksa sayılmaz mı (gevşek okuma). İkincisi: öngörücü bir soruyu cevaplanabilir saymak için en az kaç dönem geçmiş istenir — 3 mü, 12 mi.
Dört Çeşit Soru
Dört tür, dört ayrı zaman kipine karşılık gelir.
Betimsel analitik (descriptive analytics) ne oldu sorusunu sorar. Kayıtta duranı özetler: sayar, toplar, oranlar, kırar. Önceki dersin bütün işi betimseldi. İstediği veri kayıtta duranın kendisidir; bu yüzden dört tür arasında veri isteği en hafif olanıdır.
Tanısal analitik (diagnostic analytics) neden oldu sorusunu sorar. Bir neden ister ve neden kayıtta bir alan olarak durmuyorsa, nedeni ayırt edecek bir karşılaştırma ister. Kapanış nedeni kaydedilmemişse, kapanan aboneleri kapanmayanlarla karşılaştırmak bir birliktelik verir; o birlikteliğin neden olduğunu söylemek ayrı bir karardır ve veriden çıkmaz.
Öngörücü analitik (predictive analytics) ne olacak sorusunu sorar. Geçmişte gözlenen bir düzenin sürdüğü varsayımına dayanır, dolayısıyla düzeni görecek kadar geçmiş ister. “Kaç dönem yeter” sorusunun veriden gelen bir cevabı yoktur; bu bir eşik kararıdır ve bu dersin ikinci ölçüsü odur.
Önerici analitik (prescriptive analytics) ne yapılmalı sorusunu sorar. Bir eylemin sonucunu ister: indirim verilirse ne olur, ziyaret yapılırsa ne değişir. Eylem hiç denenmemişse sonucu kayıtta yoktur; denenmiş ama sonucu kaydedilmemişse de yoktur.
Eldeki Küme ve Soru Kümesi
// envanter.mjs — eldeki kume ile bir soru kumesi; her soru bir tur ve bir veri istegidir. // MODELDIR: alanlar da sorular da bolgesel olcum aginin kurgusundan gelir. export const DERINLIK = 4; // elde kac donemlik (aylik) gecmis duruyor export const VAR = new Set(["abone kimligi", "bolge", "tarife basamagi", "baglanti gunu", "kapanis gunu", "sozlesme durumu", "son okuma gunu", "aylik tuketim", "aylik ucret", "destek talebi sayisi"]); // Turetilebilir alan diskte durmaz ama duran alanlardan hesaplanir; hesabi bir karar ister. export const TURETILEBILIR = new Map([ ["abone yasi", "baglanti gunu"], ["kapanma orani", "kapanis gunu + sozlesme durumu"], ["abone basina tuketim", "aylik tuketim + abone kimligi"], ["tuketim degisim hizi", "aylik tuketim (dort donem)"], ]); export const SORULAR = [ { s: "kac abone son 30 gunde okuma gonderdi", t: "betimsel", a: ["son okuma gunu"], d: 1 }, { s: "hangi bolgede abone basina tuketim yuksek", t: "betimsel", a: ["bolge", "abone basina tuketim"], d: 1 }, { s: "tarife basamaklarina gore abone dagilimi", t: "betimsel", a: ["tarife basamagi"], d: 1 }, { s: "dort ayda toplam tuketim nasil degisti", t: "betimsel", a: ["tuketim degisim hizi"], d: 4 }, { s: "aboneler sozlesmeyi neden kapatti", t: "tanisal", a: ["kapanis nedeni"], d: 1 }, { s: "okuma dususu bir kesintiden mi geldi", t: "tanisal", a: ["kesinti kaydi"], d: 1 }, { s: "destek artisi tarife degisiminden mi", t: "tanisal", a: ["destek talebi sayisi", "tarife degisim gecmisi"], d: 1 }, { s: "kapanma orani basamaga gore degisiyor mu", t: "tanisal", a: ["kapanma orani", "tarife basamagi"], d: 1 }, { s: "gelecek ay kac abone kapatir", t: "ongorucu", a: ["kapanma orani"], d: 1 }, { s: "gelecek ceyrekte toplam tuketim ne olur", t: "ongorucu", a: ["tuketim degisim hizi"], d: 4 }, { s: "hangi abonenin sayaci gelecek ay susar", t: "ongorucu", a: ["okuma gecmisi"], d: 1 }, { s: "gelecek ay destek talebi sayisi ne olur", t: "ongorucu", a: ["destek gecmisi"], d: 1 }, { s: "hangi aboneye once saha ziyareti yapilmali", t: "onerici", a: ["mudahale ve sonucu"], d: 1 }, { s: "basamak degistirilirse kapanma azalir mi", t: "onerici", a: ["mudahale ve sonucu", "tarife degisim gecmisi"], d: 1 }, { s: "sayac yenileme butcesi hangi bolgeye", t: "onerici", a: ["mudahale ve sonucu"], d: 1 }, { s: "kapanacak aboneye indirim teklif edilmeli mi", t: "onerici", a: ["mudahale ve sonucu"], d: 1 }, ]; export const TURLER = ["betimsel", "tanisal", "ongorucu", "onerici"]; // Iki karar: turetilmis alan "var" sayilir mi, ve ongorucu soru kac donem gecmis ister. export function eksik(soru, gevsek) { return soru.a.filter((x) => !VAR.has(x) && !(gevsek && TURETILEBILIR.has(x))); } export function cevaplanir(soru, gevsek, ongoruSarti) { const gereken = soru.t === "ongorucu" ? Math.max(soru.d, ongoruSarti) : soru.d; return eksik(soru, gevsek).length === 0 && gereken <= DERINLIK; } const gen = (B) => (h) => h.map((v, j) => (j ? String(v).padStart(B[j]) : String(v).padEnd(B[0]))).join(""); if (import.meta.url === `file://${process.argv[1]}`) { console.log(`elde ${VAR.size} alan ve ${DERINLIK} donemlik gecmis var; ` + `${TURETILEBILIR.size} alan turetilebilir\n`); const y = gen([45, 10, 7]); console.log(y(["soru", "tur", "donem"]) + " eksik alan (siki okuma)"); for (const q of SORULAR) { const e = eksik(q, false); console.log(y([q.s, q.t, q.d]) + " " + (e.length ? e.join(", ") : "-")); } }
elde 10 alan ve 4 donemlik gecmis var; 4 alan turetilebilir soru tur donem eksik alan (siki okuma) kac abone son 30 gunde okuma gonderdi betimsel 1 - hangi bolgede abone basina tuketim yuksek betimsel 1 abone basina tuketim tarife basamaklarina gore abone dagilimi betimsel 1 - dort ayda toplam tuketim nasil degisti betimsel 4 tuketim degisim hizi aboneler sozlesmeyi neden kapatti tanisal 1 kapanis nedeni okuma dususu bir kesintiden mi geldi tanisal 1 kesinti kaydi destek artisi tarife degisiminden mi tanisal 1 tarife degisim gecmisi kapanma orani basamaga gore degisiyor mu tanisal 1 kapanma orani gelecek ay kac abone kapatir ongorucu 1 kapanma orani gelecek ceyrekte toplam tuketim ne olur ongorucu 4 tuketim degisim hizi hangi abonenin sayaci gelecek ay susar ongorucu 1 okuma gecmisi gelecek ay destek talebi sayisi ne olur ongorucu 1 destek gecmisi hangi aboneye once saha ziyareti yapilmali onerici 1 mudahale ve sonucu basamak degistirilirse kapanma azalir mi onerici 1 mudahale ve sonucu, tarife degisim gecmisi sayac yenileme butcesi hangi bolgeye onerici 1 mudahale ve sonucu kapanacak aboneye indirim teklif edilmeli mi onerici 1 mudahale ve sonucu
Son sütun eksikleri iki gruba ayırıyor. Bir grup türetilebilir alanlardır: abone başına tüketim, kapanma oranı, tüketim değişim hızı. Bunlar diskte durmaz ama duran alanlardan hesaplanır. Diğer grup hiç olmayan alanlardır: kapanış nedeni, kesinti kaydı, okuma geçmişi, destek geçmişi, tarife değişim geçmişi, müdahale ve sonucu. Bunlar hesapla üretilemez, çünkü kaynakta kaydedilmemişlerdir.
Ayrım önemlidir, çünkü ilk grup bir karara açıktır, ikinci grup değildir. Türetilebilir alanın “var” sayılıp sayılmaması bir okuma tercihidir. Hiç olmayan alanın var sayılması diye bir tercih yoktur; o veri toplanana kadar soru cevapsızdır.
İki Karar, İki Sayı
// karar.mjs — ayni 16 soru, ayni tablo, iki karar: cevaplanabilir soru sayisi yan yana. import { SORULAR, TURLER, DERINLIK, cevaplanir, eksik } from "./envanter.mjs"; const BILESIM = [ { ad: "siki / 3 donem", g: false, o: 3 }, { ad: "gevsek / 3 donem", g: true, o: 3 }, { ad: "siki / 12 donem", g: false, o: 12 }, { ad: "gevsek / 12 donem", g: true, o: 12 }, ]; const gen = (B) => (h) => h.map((v, j) => (j ? String(v).padStart(B[j]) : String(v).padEnd(B[0]))).join(""); const y = gen([20, 10, 9, 10, 9, 8]); console.log(`elde ${DERINLIK} donemlik gecmis var; asagidaki sayilar cevaplanabilir soru sayisi\n`); console.log(y(["karar bilesimi", ...TURLER, "toplam"])); const satir = BILESIM.map((b) => { const c = TURLER.map((t) => SORULAR.filter((q) => q.t === t && cevaplanir(q, b.g, b.o)).length); console.log(y([b.ad, ...c, c.reduce((x, v) => x + v, 0)])); return c.reduce((x, v) => x + v, 0); }); console.log(`\nayni 16 soru: en dusuk ${Math.min(...satir)}, en yuksek ${Math.max(...satir)} ` + `cevap; fark ${Math.max(...satir) - Math.min(...satir)} soru`); const acilan = SORULAR.filter((q) => !cevaplanir(q, false, 3) && cevaplanir(q, true, 3)); console.log(`turetilmis alan sayilinca acilan ${acilan.length} soru: ` + acilan.map((q) => q.t).join(", ")); for (const t of TURLER) { const hic = SORULAR.filter((q) => q.t === t) .every((q) => BILESIM.every((b) => !cevaplanir(q, b.g, b.o))); if (hic) { const n = SORULAR.filter((q) => q.t === t); const ortak = [...new Set(n.flatMap((q) => eksik(q, true)))]; console.log(`\n${t} tur dort kararin hicbirinde acilmiyor: ${n.length} soru, 0 cevap`); console.log(`hicbir kararla kapanmayan eksik: ${ortak.join(", ")}`); } }
elde 4 donemlik gecmis var; asagidaki sayilar cevaplanabilir soru sayisi karar bilesimi betimsel tanisal ongorucu onerici toplam siki / 3 donem 2 0 0 0 2 gevsek / 3 donem 4 1 2 0 7 siki / 12 donem 2 0 0 0 2 gevsek / 12 donem 4 1 0 0 5 ayni 16 soru: en dusuk 2, en yuksek 7 cevap; fark 5 soru turetilmis alan sayilinca acilan 5 soru: betimsel, betimsel, tanisal, ongorucu, ongorucu onerici tur dort kararin hicbirinde acilmiyor: 4 soru, 0 cevap hicbir kararla kapanmayan eksik: mudahale ve sonucu, tarife degisim gecmisi
Aynı tablo, aynı 16 soru; cevaplanabilir soru sayısı 2 ile 7 arasında. Fark 5 sorudur, kümenin neredeyse üçte biri. İki kararın hiçbiri veriye dokunmadı; ikisi de “elimizde ne var” sorusunun cevabını değiştirdi.
Birinci karar tek başına en büyük etkiyi yapıyor. Türetilmiş alan var sayılınca 5 soru açılıyor: iki betimsel, bir tanısal, iki öngörücü. Bu karar bedava değildir. Kapanma oranı türetilecekse payda seçilmelidir ve önceki ders paydanın üç savunulabilir değeri olduğunu gösterdi. Yani “türetilebilir alan vardır” demek, sorunun cevabına yeni bir tanım kararı eklemek demektir. Gevşek okuma soruyu açar ama beraberinde yazılması gereken karar sayısını artırır.
İkinci karar yalnız öngörücü satırı oynatıyor: derinlik şartı 3’ten 12’ye çıkınca iki öngörücü soru kapanıyor, toplam 7’den 5’e iniyor. Elde dört dönem geçmiş var; bu 3 şartını geçer, 12 şartını geçmez. Şartın kendisi veriden okunmaz. Dört dönemin bir yıllık dalgalanmayı göstermeyeceğini savunmak da, dört dönemin bir aylık tahmine yeteceğini savunmak da mümkündür. Rapora yazılması gereken şey hangisinin seçildiğidir.
Tanısal satır dört kararda en fazla 1’e çıkıyor. Açılan soru kapanma oranının tarife basamağına göre değişip değişmediğidir ve verdiği şey bir birlikteliktir: hangi basamakta kapanmanın daha sık olduğu. Kapanışın nedeninin basamak olduğu sonucu bu tablodan çıkmaz. Nedeni ayırt edecek şey ya kapanış nedeninin kaydı ya da nedeni tek başına değiştiren bir karşılaştırmadır; kümede ikisi de yok. Bir tanısal sorunun cevaplanabilir sayılması, cevabın bir neden olacağı anlamına gelmez.
Kapanmayan Boşluk
Dört satırın hepsinde önerici sütunu sıfırdır. Bu, dersin en sağlam sayısıdır çünkü hiçbir karara duyarlı değildir. Ortak eksik iki alandır ve biri belirleyicidir: müdahale ve sonucu.
Tablo olan bitenin kaydıdır. Hangi abonenin sözleşmesi kapandı, ne zaman kapandı, kapanmadan önce ne kadar tüketti — hepsi yazılı. Yazılı olmayan şey şudur: o aboneye bir şey yapıldı mı, yapıldıysa ne yapıldı, yapıldıktan sonra ne oldu. Bir indirim teklifinin kapanmayı azaltıp azaltmadığı, ancak bazı abonelere teklif verilip bazılarına verilmediği ve ikisinin sonucunun ayrı ayrı kaydedildiği bir düzenekten okunur. Böyle bir düzenek kurulmadıysa veri kümesi ne kadar büyürse büyüsün bu soru cevaplanmaz.
Buradan çıkan kural şudur: veri toplamak bir analiz kararıdır ve analizden önce alınır. Önerici sorulara cevap veren bir ağ, o soruları soracağını bilerek müdahale kaydı tutan ağdır. Elde tutulan kaydın türü hangi soruların sorulabileceğini belirler; soru kümesi genişledikçe kayıt kendiliğinden genişlemez.
Özet
- Dört analitik türü dört ayrı soru sorar: ne oldu (betimsel), neden oldu (tanısal), ne olacak (öngörücü), ne yapılmalı (önerici). Türün değişmesi tablodan istenen veriyi değiştirir.
- Aynı 16 soru ve aynı tablo üzerinde cevaplanabilir soru sayısı 2 ile 7 arasında oynar; iki karar veriye hiç dokunmadan bu farkı üretir.
- Türetilmiş alanın var sayılması 5 soru açar ama her türetme yeni bir tanım kararı ekler; öngörücü derinlik şartı 3’ten 12’ye çıkınca iki soru kapanır.
- Cevaplanabilir sayılan tanısal soru bir birliktelik verir; nedeni ayırt edecek kayıt ya da karşılaştırma kümede yoktur.
- Önerici türün dört sorusu dört karar bileşiminin hiçbirinde açılmaz, çünkü kümede müdahale ve sonucunun kaydı yoktur; veri toplama kararı analizden önce alınır.
Sonraki Adım
Bu ders ile önceki ders birlikte bir izlenim bırakabilir: önce soru seçilir, sonra türü belirlenir, sonra veri yeter mi diye bakılır, sonra hesap yapılır. Sıralı bir liste gibi görünüyor. Gerçekte bu liste bir kez baştan sona koşmaz. Önceki dersteki pencere kararı, ancak veriye bakıldıktan sonra savunulabilir hale geldi; bu dersteki derinlik şartı, ancak soru kümesi yazıldıktan sonra bir sayı kazandı. Her ikisinde de sonraki adımda öğrenilen bir şey, önceki adımda yazılmış bir kararı değiştirdi. Sonraki ders analiz iş akışını beş adımda kurar ve akışın kaç kez geriye döndüğünü sayar.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.