---
title: 'Yanlış Pozitif ve Yanlış Negatif'
source: 'https://academia.sh/tr/kurslar/guvenlik-operasyonlari/yanlis-pozitif-ve-yanlis-negatif'
course: 'Güvenlik Operasyonları ve Olay Müdahalesi'
language: tr
updated: '2026-08-17T18:08:41+00:00'
license: 'CC BY-SA 4.0'
---

# Yanlış Pozitif ve Yanlış Negatif

900 aday kalemin 20'si kurgu kalemdir ve dört öznitelikten çıkan puanların dağılımları 37–88 bandında üst üste biner: bu bantta 157 meşru ve 17 kurgu kalem vardır, hiçbir eşik ikisini birden ayıramaz. Eşik 40'ta yanlış pozitif 124 ve kaçırılan 1, eşik 80'de yanlış pozitif 1 ve kaçırılan 11; toplam hatayı en aza indiren 70 eşiğinde bile 4 yanlış pozitif ve 4 kaçırılan kalır. Günde 144 analist-dakikalık bütçe eşiği 72'ye çiviliyor: 16 uyarı, 7 kaçırılan kalem ve 42 erişilen ek kalem. Beşinci bir öznitelik bandı 49–75'e ve 15 meşru ile 7 kaleme daraltıyor, bütçe eşiğini 66'ya çekiyor, ama sıfır-sıfır veren eşik yine yok.

Bir önceki dersin dört ölçütü sabit eşiklerle çalıştı ve 43 işaretin 39'u meşru çıktı. Akla gelen
ilk düzeltme eşikleri sıkılaştırmaktır: değişim katsayısını 0,15 yerine 0,05 istemek, çıkış oranını
yirmi yerine iki yüz istemek. Bu ders o düzeltmeyi bir **tarama** olarak koşturur ve iki eğriyi aynı
eksende çizer.

Sonuç tek bir eşiğin doğru olup olmadığı değildir. Sayılan şey, iki dağılımın üst üste bindiği
banttır: o bantta bulunan kalemler için hiçbir eşik hem yanlış pozitifi hem kaçırılanı azaltamaz.
Bu, kursun geri kalanının üzerine kurulduğu ölçümdür. Aşağıdaki puan dağılımı bir **modeldir**;
puanlar kurgu özniteliklerden türetilir, gerçek bir ölçüm değildir.

- **TA23.** Aday kümesi 900 kalemdir: 880 meşru iş, 20 kurgu kalem. Etiket modelin doğrusudur ve
  puanlamaya girmez.
- **TA24.** Puan dört öznitelikten ağırlıklı toplamla çıkar: düzenlilik, çıkış oranı, hedef
  yeniliği ve saat dışılık. Ağırlıklar model verisidir.
- **TA25.** İki dağılım da **kuyrukludur**: bazı meşru kalemler yüksek puan alır, bazı kurgu
  kalemler düşük. Bu, modelin bir kusuru değil, dersin konusudur.
- **TA26.** Örtüşme bandı, en düşük kurgu kalem puanı ile en yüksek meşru puan arasındaki
  aralıktır. Bandın dışındaki kalemler her eşikte doğru sınıflanır.
- **TA27.** Bedel iki yönlüdür ve ikisi de model verisiyle sayılır: uyarı başına 9 dakika inceleme,
  kaçırılan kalem başına gün sonuna kadar erişilen 6 ek kalem, bu kurala ayrılan günlük 144
  analist-dakika.

## Puan Dağılımı ve Eşik Taraması

```js
// esik.mjs — aday kalemler puanlanir, esik taranir ve ortusme bandi sayilir. MODELDIR.
export const TOHUM = 20260405;
const uretec = (t) => { let s = t >>> 0;
  return () => (s = (s * 1664525 + 1013904223) >>> 0) / 4294967296; };
const r = uretec(TOHUM);

// Dort oznitelik, her biri 0-1 arasi. Agirliklar model verisidir.
export const AGIRLIK = { duzenlilik: 0.30, cikisOrani: 0.30, hedefYeniligi: 0.25, saatDisi: 0.15 };
const dusuk = () => r() ** 3;            // mesru kalem: cogu dusuk, kuyrugu var
const yuksek = () => 1 - r() ** 3;       // kurgu kalem: cogu yuksek, kuyrugu var

export const puanla = (o) => Math.round(100 *
  Object.entries(AGIRLIK).reduce((a, [k, w]) => a + w * o[k], 0));

export const ADAY = [];
for (let k = 0; k < 880; k++)
  ADAY.push({ duzenlilik: dusuk(), cikisOrani: dusuk(), hedefYeniligi: dusuk(),
    saatDisi: dusuk(), etiket: "mesru" });
for (let k = 0; k < 20; k++)
  ADAY.push({ duzenlilik: yuksek(), cikisOrani: yuksek(), hedefYeniligi: yuksek(),
    saatDisi: yuksek(), etiket: "kalem" });
for (const o of ADAY) o.puan = puanla(o);
ADAY.sort((a, b) => a.puan - b.puan);

export const mesru = ADAY.filter((o) => o.etiket === "mesru");
export const kalem = ADAY.filter((o) => o.etiket === "kalem");
export const tara = (esik) => ({
  esik,
  yanlisPozitif: mesru.filter((o) => o.puan >= esik).length,
  kacirilan: kalem.filter((o) => o.puan < esik).length,
  uyari: ADAY.filter((o) => o.puan >= esik).length,
});

if (import.meta.url === `file://${process.argv[1]}`) {
  const gen = (B) => (h) => h.map((v, j) => (j ? String(v).padStart(B[j])
    : String(v).padEnd(B[0]))).join("");
  const yz = gen([8, 9, 15, 13, 13, 12]);
  console.log(`model (tohum ${TOHUM}): ${ADAY.length} aday kalem, ${kalem.length} tanesi ` +
    `kurgu kalem; puan dort oznitelikten agirlikli toplamla cikiyor`);
  console.log(`mesru puan araligi ${mesru[0].puan}-${mesru[mesru.length - 1].puan}, ` +
    `kurgu kalem araligi ${kalem[0].puan}-${kalem[kalem.length - 1].puan}`);
  const yd = gen([16, 10, 14]);
  console.log();
  console.log(yd(["puan araligi", "mesru", "kurgu kalem"]));
  for (let a = 0; a < 100; a += 20) {
    const ic = (l) => l.filter((o) => o.puan >= a && o.puan < a + 20).length;
    console.log(yd([`${a}-${a + 19}`, ic(mesru), ic(kalem)]));
  }
  console.log();
  console.log(yz(["esik", "uyari", "yanlis pozitif", "kacirilan", "toplam hata", "kesinlik"]));
  for (const e of [10, 20, 30, 40, 50, 60, 70, 80]) {
    const t = tara(e);
    console.log(yz([e, t.uyari, t.yanlisPozitif, t.kacirilan,
      t.yanlisPozitif + t.kacirilan,
      t.uyari ? `${Math.round(100 * (t.uyari - t.yanlisPozitif) / t.uyari)}%` : "-"]));
  }
  // Ortusme bandi: en dusuk kurgu kalem puani ile en yuksek mesru puan arasi.
  const alt = kalem[0].puan, ust = mesru[mesru.length - 1].puan;
  const bandM = mesru.filter((o) => o.puan >= alt && o.puan <= ust).length;
  const bandK = kalem.filter((o) => o.puan >= alt && o.puan <= ust).length;
  console.log(`\nortusme bandi ${alt}-${ust}: bu bantta ${bandM} mesru ve ${bandK} kurgu kalem ` +
    `var; hicbir esik ikisini birden ayiramaz`);
  const en = [...Array(101).keys()].map(tara)
    .reduce((a, b) => (b.yanlisPozitif + b.kacirilan < a.yanlisPozitif + a.kacirilan ? b : a));
  console.log(`toplam hatayi en aza indiren esik ${en.esik}: yanlis pozitif ` +
    `${en.yanlisPozitif}, kacirilan ${en.kacirilan}; sifir-sifir veren esik yok`);
}
```

```
model (tohum 20260405): 900 aday kalem, 20 tanesi kurgu kalem; puan dort oznitelikten agirlikli toplamla cikiyor
mesru puan araligi 0-88, kurgu kalem araligi 37-97

puan araligi         mesru   kurgu kalem
0-19                   357             0
20-39                  399             1
40-59                  108             2
60-79                   15             8
80-99                    1             9

esik        uyari yanlis pozitif    kacirilan  toplam hata    kesinlik
10            766            746            0          746          3%
20            543            523            0          523          4%
30            302            282            0          282          7%
40            143            124            1          125         13%
50             74             56            2           58         24%
60             33             16            3           19         52%
70             20              4            4            8         80%
80             10              1           11           12         90%

ortusme bandi 37-88: bu bantta 157 mesru ve 17 kurgu kalem var; hicbir esik ikisini birden ayiramaz
toplam hatayi en aza indiren esik 70: yanlis pozitif 4, kacirilan 4; sifir-sifir veren esik yok
```

Dağılım tablosu dersin bütün konusunu beş satırda veriyor. Meşru kalemlerin 756'sı 40'ın altında,
kurgu kalemlerin 17'si 40'ın üstündedir; bu, puanın işe yaradığı anlamına gelir. Ama üçüncü ve
dördüncü satırlar iki dağılımın aynı kutuları paylaştığını gösteriyor: 40–59 aralığında 108 meşru
kalemle 2 kurgu kalem, 60–79 aralığında 15 meşru kalemle 8 kurgu kalem yan yana durur. Bu
satırlarda puan bir ayrım üretmez.

Eşik taraması aynı gerçeği karar diliyle yazıyor ve arada hiç düz bir bölge yoktur. Eşik 40'ta 124
yanlış pozitif ve 1 kaçırılan; eşik 80'de 1 yanlış pozitif ve 11 kaçırılan. Eşiği düşürmek
kaçırılanı azaltır ve inceleme yükünü büyütür; yükseltmek incelemeyi hafifletir ve kaçırılanı
büyütür. **Aradaki geçiş süreklidir**; iki sayının ikisini birden sıfıra indiren bir nokta yoktur.

Nedeni ikinci satırda yazılı: meşru puanlar 0 ile 88 arasında, kurgu kalem puanları 37 ile 97
arasındadır. Bu iki aralık 37–88 arasında **üst üste biner** ve o bantta 157 meşru kalem ile 17
kurgu kalem bulunur. Bir eşik bandın içinde nereye konursa konsun, altında kalan kurgu kalemleri
kaçırır ve üstünde kalan meşru kalemleri işaretler. Bandın dışındaki 726 kalem her eşikte doğru
sınıflanır; ölçülen belirsizlik yalnız bant kadardır.

Kesinlik sütunu bir başka yanılgıyı düzeltiyor. Eşik 10 için kesinlik yüzde 3 çıkıyor: uyarıların yüzde
98'i meşru iştir. Eşik 80'de kesinlik yüzde 90'a çıkar ama kaçırılan 11'e fırlar. Kesinlik tek
başına bir kalite ölçüsü değildir, çünkü **hiç uyarı üretmeyen bir kural** için tanımsızdır ve az
uyarı üreten her kural yüksek kesinlik gösterir.

## Bütçe Eşiği ve Bandı Daraltmak

Toplam hatayı en aza indiren eşik 70'tir ve orada 4 yanlış pozitif ile 4 kaçırılan kalır. Ancak bu
seçim pratikte yapılmaz, çünkü 70 eşiği 20 uyarı üretir ve her uyarı analist zamanı ister. Çalışma
noktasını doğruluk değil, kapasite belirler.

```js
// nokta.mjs — esigin iki yonlu bedeli dakika olarak, sonra besinci oznitelikle bant.
import { ADAY, tara } from "./esik.mjs";

// Model verisi (olcum degil): inceleme dakikasi, kacirilan kalemin gun sonuna kadar
// eristigi ek kalem sayisi ve bu kurala ayrilan gunluk analist dakikasi.
const INCELEME = 9, EK_KALEM = 6, BUTCE = 144;
const gen = (B) => (h) => h.map((v, j) => (j ? String(v).padStart(B[j])
  : String(v).padEnd(B[0]))).join("");
const yz = gen([8, 8, 13, 12, 15, 13]);
console.log(`gunluk butce ${BUTCE} analist-dakika, uyari basina inceleme ${INCELEME} dakika; ` +
  `kacirilan her kalem gun sonuna kadar ${EK_KALEM} ek kaleme erisiyor (model verisi)`);
console.log();
console.log(yz(["esik", "uyari", "inceleme dk", "kacirilan", "erisilen kalem", "butceye"]));
for (const e of [40, 50, 60, 70, 80, 90]) {
  const t = tara(e);
  console.log(yz([e, t.uyari, t.uyari * INCELEME, t.kacirilan, t.kacirilan * EK_KALEM,
    t.uyari * INCELEME <= BUTCE ? "sigiyor" : "sigmiyor"]));
}
const sigan = [...Array(101).keys()].map(tara).filter((t) => t.uyari * INCELEME <= BUTCE);
const secim = sigan[0];
console.log(`\nbutceye sigan en dusuk esik ${secim.esik}: ${secim.uyari} uyari, ` +
  `${secim.kacirilan} kacirilan kalem, ${secim.kacirilan * EK_KALEM} erisilen ek kalem`);

// Besinci oznitelik: kimlik kaynaginda eslesen kayit var mi. Ayirt edici ama kusursuz degil.
const uretec = (t) => { let s = t >>> 0;
  return () => (s = (s * 1664525 + 1013904223) >>> 0) / 4294967296; };
const r2 = uretec(880517);
const AG2 = { duzenlilik: 0.21, cikisOrani: 0.21, hedefYeniligi: 0.18,
  saatDisi: 0.10, eslesmeyenKimlik: 0.30 };
const ADAY2 = ADAY.map((o) => ({ ...o,
  eslesmeyenKimlik: (o.etiket === "kalem" ? r2() < 0.8 : r2() < 0.03) ? 1 : 0 }));
for (const o of ADAY2) o.puan = Math.round(100 *
  Object.entries(AG2).reduce((a, [k, w]) => a + w * o[k], 0));

const bant = (liste) => {
  const m = liste.filter((o) => o.etiket === "mesru"), k = liste.filter((o) => o.etiket === "kalem");
  const alt = Math.min(...k.map((o) => o.puan)), ust = Math.max(...m.map((o) => o.puan));
  const say = (l) => l.filter((o) => o.puan >= alt && o.puan <= ust).length;
  // Calisma noktasi: butceye sigan EN DUSUK esik.
  const en = [...Array(101).keys()].map((e) => ({ e, n: liste.filter((o) => o.puan >= e).length,
    yp: m.filter((o) => o.puan >= e).length, kc: k.filter((o) => o.puan < e).length }))
    .find((x) => x.n * INCELEME <= BUTCE);
  return { alt, ust, m: say(m), k: say(k), en };
};
const yb = gen([18, 9, 16, 16, 13, 13]);
console.log();
console.log(yb(["puanlama", "bant", "banttaki mesru", "banttaki kalem", "butce esigi",
  "yp / kacan"]));
for (const [ad, liste] of [["dort oznitelik", ADAY], ["bes oznitelik", ADAY2]]) {
  const b = bant(liste);
  console.log(yb([ad, `${b.alt}-${b.ust}`, b.m, b.k, b.en.e, `${b.en.yp} / ${b.en.kc}`]));
}
console.log(`\nbesinci oznitelik banttaki kalem sayisini dusuruyor ama bandi kapatmiyor; ` +
  `sifir yanlis pozitif ve sifir kacirilan veren esik iki puanlamada da yok`);
```

```
gunluk butce 144 analist-dakika, uyari basina inceleme 9 dakika; kacirilan her kalem gun sonuna kadar 6 ek kaleme erisiyor (model verisi)

esik       uyari  inceleme dk   kacirilan erisilen kalem      butceye
40           143         1287           1              6     sigmiyor
50            74          666           2             12     sigmiyor
60            33          297           3             18     sigmiyor
70            20          180           4             24     sigmiyor
80            10           90          11             66      sigiyor
90             3           27          17            102      sigiyor

butceye sigan en dusuk esik 72: 16 uyari, 7 kacirilan kalem, 42 erisilen ek kalem

puanlama               bant  banttaki mesru  banttaki kalem  butce esigi   yp / kacan
dort oznitelik        37-88             157              17           72        3 / 7
bes oznitelik         49-75              15               7           66        1 / 5

besinci oznitelik banttaki kalem sayisini dusuruyor ama bandi kapatmiyor; sifir yanlis pozitif ve sifir kacirilan veren esik iki puanlamada da yok
```

Bütçe sütunu eşik seçimini elden alıyor. Toplam hatayı en aza indiren 70 eşiği 180 dakika inceleme
ister ve 144 dakikalık bütçeye sığmaz. Sığan en düşük eşik 72'dir; orada 16 uyarı incelenir, 7 kurgu
kalem kaçar ve model verisine göre bu 7 kalem gün sonuna kadar 42 ek kaleme erişir. **Eşiği seçen
şey doğruluk değil, analist dakikasıdır.**

İki yönlü bedelin birimleri farklıdır ve bu, karşılaştırmayı zorlaştıran asıl güçlüktür. Sol taraf
dakikadır ve doğrudan ödenir: 40 eşiğinde 1.287 dakika, yani dokuz kişilik bir günden fazla. Sağ
taraf kalemdir ve gecikmeli ödenir: 90 eşiğinde 17 kaçırılan kalem, 102 erişilen ek kalem. İkisini
aynı eksende toplamak ancak bir kalemin kaç dakikaya karşılık geldiği yazılırsa mümkündür ve o sayı
teknik değil, kurumsal bir karardır.

Son tablo tek gerçek çıkış yolunu gösteriyor: bandı daraltmak. Beşinci öznitelik — kalemin kimlik
kaynağında eşleşen bir kaydının bulunmaması — bandı 37–88'den 49–75'e, banttaki meşru kalemi
157'den 15'e, banttaki kurgu kalemi 17'den 7'ye indiriyor. Bütçe eşiği 72'den 66'ya iner ve o
noktada yanlış pozitif 3'ten 1'e, kaçırılan 7'den 5'e düşer. **İki sayı aynı anda iyileşiyor**,
çünkü değişen şey eşik değil, puanın kendisidir.

Beşinci özniteliğin de bir bedeli vardır ve o bedel ikinci derste ölçülmüştü. "Kimlik kaynağında
eşleşen kayıt yok" diyebilmek için önce eşlemenin denenmiş olması gerekir; o eşleme beş dakikalık
pencerede kayıtların bir bölümüne yanıt verebiliyordu ve kalanında sonuç belirsizdi. Belirsiz kalan
kalemde bu öznitelik doldurulamaz. Yani bandı daraltan iyileştirme, hattın **daha önce ölçülmüş bir
eksikliğine** dayanır ve o eksiklik büyüdükçe iyileştirme küçülür.

Yine de bant kapanmıyor. Beşinci öznitelik kurgu kalemlerin yüzde 80'inde bulunuyor, meşru
kalemlerin yüzde 3'ünde de bulunuyor; kalan örtüşme bu iki oranın doğrudan sonucudur. Sıfır yanlış
pozitif ve sıfır kaçırılan veren eşik iki puanlamada da yoktur ve daha fazla öznitelik eklemek bandı
daraltır, kapatmaz.

## Özet

- 900 aday kalemin puanları 37–88 bandında örtüşüyor; o bantta 157 meşru ve 17 kurgu kalem vardır
  ve hiçbir eşik ikisini birden ayıramaz. Bandın dışındaki 726 kalem her eşikte doğru sınıflanır.
- Eşik 40'ta 124 yanlış pozitif ve 1 kaçırılan, eşik 80'de 1 yanlış pozitif ve 11 kaçırılan çıkıyor;
  toplam hatayı en aza indiren 70 eşiğinde bile 4 ve 4 kalıyor.
- Kesinlik tek başına kalite ölçüsü değildir: az uyarı üreten her kural yüksek kesinlik gösterir,
  eşik 80'de kesinlik yüzde 90 iken kaçırılan 11'dir.
- Çalışma noktasını doğruluk değil bütçe seçiyor: 144 analist-dakikaya sığan en düşük eşik 72'dir
  ve orada 7 kurgu kalem kaçarak 42 ek kaleme erişiyor.
- Beşinci öznitelik bandı 49–75'e, banttaki meşru kalemi 15'e ve kurgu kalemi 7'ye indiriyor; bütçe
  eşiğinde yanlış pozitif 3'ten 1'e, kaçırılan 7'den 5'e düşüyor, ama sıfır-sıfır veren eşik yok.

## Sonraki Adım

Bandı daraltan şey eşik ayarı değil, yeni bir öznitelikti — yani puanlamanın kendisinin
değişmesiydi. Bu, bir kuralın ayarlanması değil, **yeniden yazılmasıdır** ve düzenli yapılan bir
iştir. Sonraki ders o işi bir döngü olarak ele alır: bir kural kümesinin iki sürümünü aynı teknik
listesine karşı koşturur ve kapsanan teknik sayısını karşılaştırır. Ölçü orada kaç kural yazıldığı
değil, taktik ve teknik matrisinin kaç gözünün en az bir kuralla kapsandığı, kaçının hiç
kapsanmadığı ve kapsandığı yazılan gözlerin kaçında kuralın hiç ateşlenemeyeceğidir — çünkü o gözün
kaynağı hattın hiç toplamadığı bir yerdedir.
