İçeriğe geç
academia.sh

Ders 09 / 09

Veri Etiği ve Mahremiyet

Aynı abone kümesine sorulan 18 sorunun 14'ü eldeki alanlarla cevaplanabilir, 4'ü için alan yoktur; sınır kuralı değişince cevaplanabilir olduğu halde sorulmaması gerekenlerin sayısı 3'ten 8'e çıkar ve raporlanabilir soru 11'den 6'ya iner. Kırılım derinleştikçe grup küçülür: bölge kırılımında en küçük grup 209 kayıt, dört alanlık kırılımda 1 kayıttır ve 45 abone tek başına bir hücrededir. En küçük grup eşiği 5'ten 10'a çıkarıldığında bastırılan hücre 117'den 146'ya, raporun dışında kalan kayıt 245'ten 431'e çıkar.

İçindekiler

Bir önceki ders kalite eşiğini sıkılaştırdı ve 1.400 satırdan 422 satır bıraktı. O 422 satırın her biri bir haneye aittir. Kurs boyunca satırlar birer gözlem olarak ele alındı; bir kırılım yeterince inceltildiğinde satır artık bir gözlem değil, tek bir kişidir.

Bu ders iki şeyi sayar. Birincisi, aynı kümeye sorulabilecek sorulardan kaçının cevaplanabilir olduğu halde sorulmaması gerektiğidir. İkincisi, bir kırılımın kaç kişilik gruba düştüğüdür. İkisinin ortak noktası şudur: hiçbiri veriden okunmaz, çünkü bir hesabın yapılabilir olması yapılması gerektiğini söylemez.

Tespit, Müdahale ve Uyumluluk kursunda denetim kaydının ne kaydettiği ölçülmüştü. Buradaki soru başkadır: kayıt zaten alınmıştır; ölçülen şey analizin nerede duracağıdır.

  • VY19. Küme yine 1.400 satırlık abone kaydıdır ve kurgudur. Sayılan şey kümenin içeriği değil, ona sorulabilecek sorulardır.
  • VY20. Kişisel veri, tür olarak, bir kişiye bağlanabilen kayıttır. Sınırlar burada analiz kararı olarak ele alınır ve kararın sayıyı ne kadar oynattığı ölçülür.
  • VY21. Üç sınır kuralı birikimlidir: tekil kişiye inen çıkarım yapılmaz, veri toplandığı amacın dışında kullanılmaz, hassas türde bir nitelik çıkarımla üretilmez.
  • VY22. En küçük grup eşiği kk, bir kırılım hücresinin raporlanabilmesi için içinde bulunması gereken en az kayıt sayısıdır. kk modele girdi olarak verilir.

Cevaplanabilir Ama Sorulmayacak

// sorular.mjs — ayni abone kumesine sorulan 18 soru iki eksende siniflanir:
// veriyle cevaplanabilir mi, ve sinir kurali sorulmasina izin veriyor mu. MODELDIR.
// [soru, alan var mi, kisiye iner mi, amac disi mi, hassas cikarim mi]
export const SORULAR = [
  ["bolge basina ortalama tuketim", 1, 0, 0, 0],
  ["tarife basamagi dagilimi", 1, 0, 0, 0],
  ["saha ziyareti alan abone orani", 1, 0, 0, 0],
  ["memnuniyetin bolgeye gore farki", 1, 0, 0, 0],
  ["sayac basina aylik ortalama okuma", 1, 0, 0, 0],
  ["okuma gecikmesi en yuksek bolge", 1, 0, 0, 0],
  ["abone tarife degisikligini neden istedi", 0, 0, 0, 0],
  ["gelir duzeyi tuketimi nasil etkiliyor", 0, 0, 0, 0],
  ["sikayet eden abone hizmeti birakti mi", 0, 0, 0, 0],
  ["tanitim goren daha az mi tuketti", 0, 0, 0, 0],
  ["hangi hane su an bos", 1, 1, 0, 0],
  ["bir abonenin gunluk yasam duzeni", 1, 1, 0, 0],
  ["en dusuk tuketimli aboneler listesi", 1, 1, 0, 0],
  ["abone listesi tarife tanitimina verilsin", 1, 0, 1, 0],
  ["gecikmis abone baska hizmete yonlensin", 1, 0, 1, 0],
  ["saha ekibi memnuniyetle degerlendirilsin", 1, 0, 1, 0],
  ["tuketimden hanedeki kisi sayisi ve yas", 1, 0, 0, 1],
  ["gece tuketiminden bakim ihtiyaci", 1, 0, 0, 1],
].map(([s, alan, kisi, amac, hassas]) => ({ s, alan, kisi, amac, hassas }));
// Sinir kurallari birikimlidir; her biri bir onceki kumeye eklenir.
export const KURAL = [
  ["K0 kural yok", () => false],
  ["K1 kimlige inme yasak", (q) => q.kisi === 1],
  ["K2 + amac bagi", (q) => q.kisi === 1 || q.amac === 1],
  ["K3 + hassas cikarim", (q) => q.kisi === 1 || q.amac === 1 || q.hassas === 1],
];
if (import.meta.url === `file://${process.argv[1]}`) {
  const N = SORULAR.length, cevaplanabilir = SORULAR.filter((q) => q.alan === 1).length;
  console.log(`${N} soru, ayni abone kumesi; ${cevaplanabilir} tanesi elde bulunan ` +
    `alanlarla cevaplanabilir, ${N - cevaplanabilir} tanesi icin alan yok`);
  const y = (h) => String(h[0]).padEnd(24) + h.slice(1).map((v) => String(v).padStart(15)).join("");
  console.log("\n" + y(["sinir kurali", "sorulamaz", "raporlanabilir", "kapanan pay"]));
  for (const [ad, engel] of KURAL) {
    const yasak = SORULAR.filter((q) => q.alan === 1 && engel(q)).length;
    console.log(y([ad, yasak, cevaplanabilir - yasak,
      `%${(100 * yasak / cevaplanabilir).toFixed(1)}`]));
  }
  const [, k1] = KURAL[1], [, k3] = KURAL[3];
  console.log(`\nK1'de sorulamayan ${SORULAR.filter((q) => q.alan === 1 && k1(q)).length}, ` +
    `K3'te ${SORULAR.filter((q) => q.alan === 1 && k3(q)).length}; ` +
    `veri hic degismedi, yalnizca sinir kurali degisti`);
  console.log(`\niki ayri sinir: alan yok ${N - cevaplanabilir} soru (veri siniri), ` +
    `K3'te ${SORULAR.filter((q) => q.alan === 1 && k3(q)).length} soru (analiz siniri)`);
  const y2 = (h) => String(h[0]).padEnd(42) + h.slice(1).map((v) => String(v).padStart(14)).join("");
  console.log("\n" + y2(["analiz sinirina takilan soru", "cevaplanabilir", "engel"]));
  for (const q of SORULAR.filter((q) => q.alan === 1 && k3(q))) {
    console.log(y2([q.s, "evet", q.kisi ? "kimlik" : q.amac ? "amac" : "hassas tur"]));
  }
}
18 soru, ayni abone kumesi; 14 tanesi elde bulunan alanlarla cevaplanabilir, 4 tanesi icin alan yok

sinir kurali                  sorulamaz raporlanabilir    kapanan pay
K0 kural yok                          0             14           %0.0
K1 kimlige inme yasak                 3             11          %21.4
K2 + amac bagi                        6              8          %42.9
K3 + hassas cikarim                   8              6          %57.1

K1'de sorulamayan 3, K3'te 8; veri hic degismedi, yalnizca sinir kurali degisti

iki ayri sinir: alan yok 4 soru (veri siniri), K3'te 8 soru (analiz siniri)

analiz sinirina takilan soru              cevaplanabilir         engel
hangi hane su an bos                                evet        kimlik
bir abonenin gunluk yasam duzeni                    evet        kimlik
en dusuk tuketimli aboneler listesi                 evet        kimlik
abone listesi tarife tanitimina verilsin            evet          amac
gecikmis abone baska hizmete yonlensin              evet          amac
saha ekibi memnuniyetle degerlendirilsin            evet          amac
tuketimden hanedeki kisi sayisi ve yas              evet    hassas tur
gece tuketiminden bakim ihtiyaci                    evet    hassas tur

Tablo iki ayrı sınırı yan yana koyuyor. Dört soru veri sınırına takılır: kümede gelir, müdahale ya da ayrılma kaydı yoktur, ve bu sınır alan eklenerek kaldırılabilir. Sekiz soru analiz sınırına takılır ve son sütun hepsi için “evet” yazar: cevaplanabilirler. Bu sınır alan ekleyerek kaldırılmaz, çünkü engel eksik veri değil, sorunun kendisidir.

Sorulamayacak soru sayısı bir sabit de değildir. Yalnız kimliğe inme kuralı geçerliyken 3, üç kural birlikteyken 8 çıkar; raporlanabilir soru 11’den 6’ya iner ve kümede tek bir kayıt değişmez. Bir çözümleme “veri kişisel bilgi içeriyor mu” sorusuna evet ya da hayır cevabıyla yetinemez; hangi kuralların uygulandığı yazılmadıkça kaç sorunun kapatıldığı bilinmez.

Kapatılan sekiz sorunun engelleri birbirinden farklıdır. Üçü kimliğe iner: “hangi hane şu an boş” sorusu tüketim düşüşünden cevaplanabilir ve cevabı tek bir haneyi işaret eder. Üçü amaç bağını kırar: kayıtlar ölçüm ve faturalama için toplanmıştır. İkisi hassas türde bir niteliği çıkarımla üretir; kümede yaş ya da bakım ihtiyacı alanı yoktur, ama gece tüketimi deseninden bir tahmin üretilebilir. Bu üçüncü grup en sessizidir, çünkü toplanmış bir hassas alan yoktur — hassas nitelik analizin kendisinde doğar.

Kırılım Derinleştikçe Grup Küçülür

Kimliğe inme kuralı bir niyet beyanı olarak kaldığı sürece ölçülemez; ölçülebilmesi için bir sayıya bağlanması gerekir: bir kırılım hücresinde kaç kişi var.

// kirilim.mjs — kirilim derinlestikce grup buyuklugu; ayni 1.400 satirlik
// abone kaydi. MODELDIR, kume kurgudur.
const TOHUM = 20260218, KAYIT = 1400, TARIFE = [10, 25, 40];
const karistir = (x) => { x = Math.imul(x ^ (x >>> 16), 2246822507);
  x = Math.imul(x ^ (x >>> 13), 3266489909); return (x ^ (x >>> 16)) >>> 0; };
const uretec = (t) => { let s = karistir(t);
  return () => (s = (s * 1664525 + 1013904223) >>> 0) / 4294967296; };
const ayrik = (u, w) => { let t = 0;
  for (let i = 0; i < w.length; i++) { t += w[i]; if (u < t) return i; } return w.length - 1; };
const BOLGE = [
  { ad: "kuzey", pay: 0.28, taban: 21, mem: [0.05, 0.10, 0.25, 0.40, 0.20] },
  { ad: "guney", pay: 0.22, taban: 17, mem: [0.02, 0.08, 0.30, 0.45, 0.15] },
  { ad: "dogu", pay: 0.18, taban: 26, mem: [0.20, 0.08, 0.05, 0.12, 0.55] },
  { ad: "bati", pay: 0.14, taban: 14, mem: [0.10, 0.15, 0.25, 0.30, 0.20] },
  { ad: "merkez", pay: 0.18, taban: 23, mem: [0.06, 0.12, 0.28, 0.34, 0.20] },
];
const KAYITLAR = Array.from({ length: KAYIT }, (_, i) => {
  const r = uretec(TOHUM + i);
  const b = BOLGE[ayrik(r(), BOLGE.map((x) => x.pay))];
  const t = Math.max(1.2, b.taban * Math.exp((r() + r() + r() - 1.5) * 0.62));
  const tuketim = Math.round(t * 100) / 100;
  return { bolge: b.ad, sayac_sayisi: ayrik(r(), [0.62, 0.24, 0.10, 0.04]) + 1,
    ziyaret_sayisi: ayrik(r(), [0.38, 0.32, 0.16, 0.08, 0.04, 0.02]),
    memnuniyet: ayrik(r(), b.mem) + 1,
    basamak: tuketim < TARIFE[0] ? 1 : tuketim < TARIFE[1] ? 2 : tuketim < TARIFE[2] ? 3 : 4 };
});
const ALAN = [
  ["bolge", (k) => k.bolge, 5], ["basamak", (k) => k.basamak, 4],
  ["sayac", (k) => k.sayac_sayisi, 4], ["memnuniyet", (k) => k.memnuniyet, 5],
  ["ziyaret", (k) => k.ziyaret_sayisi, 6],
];
const hucreler = (d) => {
  const m = new Map();
  for (const k of KAYITLAR) {
    const anahtar = ALAN.slice(0, d).map(([, f]) => f(k)).join("|");
    m.set(anahtar, (m.get(anahtar) ?? 0) + 1);
  }
  return [...m.values()];
};
const y = (h) => String(h[0]).padEnd(48) + h.slice(1).map((v) => String(v).padStart(10)).join("");
console.log(`${KAYIT} abone kaydi; kirilim her adimda bir alan derinlesir`);
console.log("\n" + y(["kirilim", "olasi", "dolu", "en kucuk", "tekil", "k<5 kayit"]));
for (let d = 1; d <= ALAN.length; d++) {
  const h = hucreler(d), olasi = ALAN.slice(0, d).reduce((a, [, , n]) => a * n, 1);
  console.log(y([ALAN.slice(0, d).map(([a]) => a).join(" x "), olasi, h.length,
    Math.min(...h), h.filter((n) => n === 1).length,
    h.filter((n) => n < 5).reduce((a, n) => a + n, 0)]));
}
// Esik karari: en kucuk grup buyuklugu k. k altindaki hucreler bastirilir.
const bastir = (d, k) => {
  const h = hucreler(d);
  const kapali = h.filter((n) => n < k);
  return { hucre: h.length, kapali: kapali.length, kayit: kapali.reduce((a, n) => a + n, 0) };
};
console.log("\nen kucuk grup esigi degisince (kirilim: bolge x basamak x sayac x memnuniyet)");
const y2 = (h) => String(h[0]).padEnd(10) + h.slice(1).map((v) => String(v).padStart(16)).join("");
console.log(y2(["esik", "dolu hucre", "bastirilan", "disarida kayit", "kapsam"]));
for (const k of [5, 10, 20]) {
  const o = bastir(4, k);
  console.log(y2([`k = ${k}`, o.hucre, o.kapali, o.kayit,
    `%${(100 * (KAYIT - o.kayit) / KAYIT).toFixed(1)}`]));
}
const a = bastir(4, 5), b = bastir(4, 10);
console.log(`\nk 5'ten 10'a cikinca bastirilan hucre ${a.kapali} yerine ${b.kapali}, ` +
  `raporun disinda kalan kayit ${a.kayit} yerine ${b.kayit}`);
const derin = hucreler(5);
console.log(`en ince kirilimda ${derin.filter((n) => n === 1).length} abone tek basina ` +
  `bir hucrede; o hucrenin her sayisi bir kisinin kaydidir`);
1400 abone kaydi; kirilim her adimda bir alan derinlesir

kirilim                                              olasi      dolu  en kucuk     tekil k<5 kayit
bolge                                                    5         5       209         0         0
bolge x basamak                                         20        16         2         0         2
bolge x basamak x sayac                                 80        54         1         4        49
bolge x basamak x sayac x memnuniyet                   400       190         1        45       245
bolge x basamak x sayac x memnuniyet x ziyaret        2400       502         1       251       694

en kucuk grup esigi degisince (kirilim: bolge x basamak x sayac x memnuniyet)
esik            dolu hucre      bastirilan  disarida kayit          kapsam
k = 5                  190             117             245           %82.5
k = 10                 190             146             431           %69.2
k = 20                 190             172             770           %45.0

k 5'ten 10'a cikinca bastirilan hucre 117 yerine 146, raporun disinda kalan kayit 245 yerine 431
en ince kirilimda 251 abone tek basina bir hucrede; o hucrenin her sayisi bir kisinin kaydidir

Tek alanlık kırılımda en küçük grup 209 kayıttır ve tekil hücre yoktur. İkinci alanla en küçük grup 2’ye iner, üçüncüde ilk tekil hücreler görünür, dördüncüde 45, beşincide 251 abone tek başına bir hücrededir. Kırılım derinleştikçe hücre sayısı çarpımla artar, kayıt sayısı sabit kalır; ikisinin oranı grup büyüklüğüdür ve hızla 1’e düşer.

Bunun anlamı şudur: dört alanlık kırılımda “kuzey bölgesinde, üçüncü tarife basamağında, iki sayaçlı, memnuniyet notu 1 olan abonelerin ortalama tüketimi” satırı bir özet gibi görünür ve gerçekte tek bir kişinin okumasıdır. Rapor hiçbir kimlik alanı taşımaz; yine de o dört niteliği bilen biri için satır o kişiye aittir. Kimliğe inmek için kimlik alanına gerek yoktur.

Son tablo bunun karşısına ölçülebilir bir karar koyuyor. k=5k = 5 seçildiğinde 190 hücrenin 117’si bastırılır, 245 kayıt raporun dışında kalır ve kapsam yüzde 82,5’e iner; k=10k = 10 seçildiğinde 146 hücre bastırılır, 431 kayıt dışarıda kalır, kapsam yüzde 69,2 olur. Eşiği ikiye katlamak bastırılan hücreyi yüzde 25 artırır ama dışarıda kalan kaydı yüzde 76 artırır, çünkü eşik yükseldikçe daha kalabalık hücreler de sınırın altına düşer. kk bir teknik ayar değil, bir takası yazan karardır ve iki savunulabilir eşik iki farklı rapor üretir. Bir kırılım tablosunun yanında hangi kk ile bastırıldığı yazılmazsa okuyucu bastırılmış hücrelerin var olmadığını sanır.

Özet

  • İki ayrı sınır vardır: dört soru veri sınırına takılır ve alan eklenerek açılabilir, sekiz soru analiz sınırına takılır ve hepsi cevaplanabilirdir.
  • Sorulamayacak soru sayısı da bir karara bağlıdır: tek kuralla 3, üç kural birlikteyken 8 çıkar.
  • Hassas nitelik her zaman toplanmış bir alan değildir; iki soruda kümede yoktur, çıkarımla üretilir.
  • Kırılım derinleştikçe grup küçülür: en küçük grup bir alanda 209, dört alanda 1 kayıttır ve 45 abone tek başına bir hücrededir.
  • En küçük grup eşiği bir takas kararıdır: kk 5’ten 10’a çıkınca bastırılan hücre 117’den 146’ya, dışarıda kalan kayıt 245’ten 431’e çıkar.

Kurs Kapanışı

Dokuz ders aynı işi yaptı: bir sayı üretti, kararı yazdı, kararı değiştirip farkı bastı.

Ders Rapor edilen sayı Değişen karar Fark
Veri Analitiği Nedir 3 849 etkin abone etkin tanımı değişir 3 548, 645 kayıtta ayrışma
Analitik Türleri 7 cevaplanabilir soru türetilmiş alan yok sayılır 2 soru, 5’i kapanır
Analiz İş Akışı 33 adım ziyareti karar doğduğu adımda yazılır 8 ziyaret, 1 dönüş
Analist Rolleri yüzde -5,14 abone ölçüt abone başına ücret yüzde +1,89
Veri Türleri ortalama 1,20 ziyaret kesikli alan dağılımla okunur eşit kayıt 0, yüzde 68,3 altında
Ölçüm Ölçekleri dogu 3,71 ile birinci basamak kodlaması değişir dogu 5,88 ile beşinci
Veri Kaynakları 22,42 m³ saha anketi kaynak telemetriye geçer 17,01 m³, 5,41 m³ açık
Veri Kalitesi 24,70 m³, 1.400 satır kalite eşiği sıkılaşır 20,83 m³, 422 satır
Veri Etiği 3 soru sorulamaz sınır kuralı genişler 8 soru, 6’sı raporlanabilir

Dokuz satırın hiçbirinde hesap hatası yoktur. Her satırın sol sütunu da sağ sütunu da savunulabilir bir sayıdır ve aralarındaki farkı üreten tek şey orta sütundur. Kursun kuralı budur ve dokuz kez ölçülmüştür: bir sayının yanında hangi kararla üretildiği yazılmıyorsa o sayı bir bulgu değil, bir seçimdir. Kararı yazılmayan sayı ölçülmemiş sayılır.

Tablonun kendisi bir sorun gösteriyor. Dokuz derste sayılan bütün kararlar elle alındı: hangi tanım seçildi, hangi kodlama kullanıldı, hangi kaynak okundu, hangi eşik uygulandı. Hiçbiri yazılı bir yerde durmuyor; kararların gövdesi bu derslerin metnindedir, hesabın kendisinde değil. Aynı kümeyi alan ikinci bir kişi aynı sayıyı bulacak mı sorusunun cevabı yok, çünkü onun elinde kararların listesi değil yalnız sonuç var. Sonraki kurs olan Elektronik Tablolarla Analiz işi buradan alır: hesabın bir yerde durduğu, bir girdiyi değiştirmenin bütün sonuçları yeniden hesapladığı bir düzenekte aynı kararların ne kadarının görünür kaldığını ölçer.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat