---
title: 'Veri Etiği ve Mahremiyet'
source: 'https://academia.sh/tr/kurslar/veri-analitigine-giris/veri-etigi-ve-mahremiyet'
course: 'Veri Analitiğine Giriş'
language: tr
updated: '2026-08-17T18:08:46+00:00'
license: 'CC BY-SA 4.0'
---

# 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.

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** $k$, bir kırılım hücresinin raporlanabilmesi için içinde bulunması
  gereken en az kayıt sayısıdır. $k$ modele girdi olarak verilir.

## Cevaplanabilir Ama Sorulmayacak

```js
// 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.

```js
// 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 = 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 = 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. $k$ 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 $k$ 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: $k$ 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.
