İçeriğe geç
academia.sh

Ders 10 / 18

Dosya ve Bağlantı İtibar Servisleri

Çoklu motor itibar sonucunun birleştirilmesinin ölçülmesi: 24 kalem ve 12 motorda çoğunluk eşiği yükseldikçe kesinliğin yüzde 50'den 86'ya çıkıp anmanın yüzde 92'den 8'e düşmesi, tek motor ailesi içinde çoğunluk kararının tek motor seçmekle özdeş çıkması, 24 kalemin 10'unun gizlilik sınırı nedeniyle hiç sorulamaması ve her sorgunun karşı tarafa iz bırakması.

İçindekiler

Önceki derste iki kalem hiçbir çözümleme ortamında karara bağlanamadı ve her kalem için ayrı bir hazırlık, gözlem ve elle inceleme bütçesi harcandı. Bir kalemi karara bağlamanın ikinci bir yolu daha vardır: aynı kalemi çok sayıda bağımsız motora sorup çıkan sonuçları birleştirmek. Bu yol saniyeler sürer ve karşılığında yeni bir soru getirir — birbiriyle çelişen sonuçlar nasıl birleştirilir.

Çoklu motor itibar servisi bir kalemi ya da bir bağlantı hedefini birçok denetim motoruna sorar ve dönen işaretleri bir arada gösterir. Çıktı bir karar değil, bir oy dağılımıdır; kararı veren, o dağılımı okuyan taraftır. Bu dersin ölçtüğü şey o okumanın kalitesidir.

Oy Saymak ve Bağımsızlık

Bir eşik seçmek gerekir: kaç motor işaretlerse kalem kötü sayılacak. Eşik düştükçe daha çok kötü kalem yakalanır ve daha çok temiz kalem yanlışlıkla işaretlenir; yükseldikçe tersi olur. İki sayı bu ödünleşimi ölçer. Kesinlik (precision), kötü dediklerimizin ne kadarının gerçekten kötü olduğudur. Anma (recall), gerçekten kötü olanların ne kadarını yakaladığımızdır.

Çoğunluk kararının kazanç sağlaması tek bir koşula bağlıdır: motorların birbirinden bağımsız yanılması. Aynı yöntemi kullanan iki motor aynı kalemlerde yanılır; ikisinin oyu bir oydan fazlasını söylemez. Bu derste motorlar iki aileye ayrılır ve aile içinde iç içe geçmiş kabul edilir: duyarlılığı yüksek bir motor, düşüğünün işaretlediği her kalemi işaretler. Aileler arasında böyle bir ilişki yoktur.

  • AA29. Motor listesi, kalem listesi ve eşik değerleri modeldir; gerçek bir itibar servisi, gerçek bir dosya ve gerçek bir açık kimliği yok.
  • AA30. Bir motor bir kalemi ancak duyarlılığı, kalemin o ailedeki eşiğinden büyük ya da eşitse işaretler. Kötü kalemlerde eşik “yakalanması için gereken duyarlılık”, temiz kalemlerde “yanlış işaretlenmesi için gereken duyarlılık” anlamına gelir.
  • AA31. Aile içinde motorlar iç içe geçmiştir; aileler arasında bağımsızdır. Gerçekte motorlar arasında kısmi bağımlılık vardır ve bu model iki uç durumu birlikte gösterir.
  • AA32. Rastgelelik yok; bütün eşikler elle yazıldı.
  • AA33. Gizlilik sınıfı acik olan kalemin dosyası gönderilebilir. ic ve abone-verisi kalemlerinde dosya gönderilmez; yalnız özet sorulur ve özet sorgusu ancak kalem servis tarafında biliniyorsa bir sonuç döndürür.
  • AA34. Bir dosyayı dışarıdaki bir servise göndermek onu yayımlamaktır; geri alınamaz.
  • AA35. Sorgu hedef sistemlere gitmez; hedefte kayıt üretmez.
// itibar/motor.mjs — coklu motor itibar servisi MODELIDIR. Gercek bir servis, gercek bir
// dosya ve gercek bir kalem yok; motorlar yalniz aile ve duyarlilik degeriyle anilir.
// Iki aile iki ayri sinyale bakar. Bir aile icinde motorlar ic ice gecmistir:
// duyarliligi yuksek motor, dusugunun isaretledigi her kalemi isaretler.
export const MOTOR = [
  ...[30, 40, 50, 60, 75, 90].map((d, i) => ({ ad: `i${i + 1}`, aile: 'imza', duyarlilik: d })),
  ...[30, 40, 50, 60, 75, 90].map((d, i) => ({ ad: `d${i + 1}`, aile: 'davranis', duyarlilik: d })),
];

// Kalem: kotu ise esik = yakalanmasi icin gereken en dusuk duyarlilik (aile basina).
// Temiz ise esik = yanlis isaretlenmesi icin gereken en dusuk duyarlilik. 95 = hicbir motor.
// gizlilik: acik = dosya gonderilebilir; ic ve abone-verisi = gonderilemez, yalniz ozet sorulur.
// bilinen: ozet sorgusunun servis tarafinda karsiligi var mi.
export const KALEM = `
  k01 kotu  30 30 acik         evet
  k02 kotu  40 40 acik         evet
  k03 kotu  50 40 ic           evet
  k04 kotu  60 50 acik         hayir
  k05 kotu  50 60 ic           hayir
  k06 kotu  75 60 abone-verisi evet
  k07 kotu  60 75 ic           hayir
  k08 kotu  75 75 acik         hayir
  k09 kotu  90 75 ic           evet
  k10 kotu  95 60 abone-verisi hayir
  k11 kotu  95 95 ic           hayir
  k12 kotu  40 50 acik         hayir
  k13 temiz 95 95 acik         evet
  k14 temiz 30 95 ic           evet
  k15 temiz 95 30 abone-verisi evet
  k16 temiz 40 95 ic           hayir
  k17 temiz 95 40 acik         evet
  k18 temiz 50 95 ic           hayir
  k19 temiz 95 50 abone-verisi evet
  k20 temiz 60 95 ic           hayir
  k21 temiz 95 60 acik         evet
  k22 temiz 75 95 ic           hayir
  k23 temiz 95 75 abone-verisi hayir
  k24 temiz 30 30 abone-verisi hayir
`.trim().split('\n').map((r) => {
  const [ad, gercek, imza, dav, gizlilik, bilinen] = r.trim().split(/\s+/);
  return { ad, kotu: gercek === 'kotu', esik: { imza: +imza, davranis: +dav },
    gizlilik, bilinen: bilinen === 'evet' };
});

export const isaretler = (m, k) => m.duyarlilik >= k.esik[m.aile];
export const isaretSayisi = (k, kume = MOTOR) => kume.filter((m) => isaretler(m, k)).length;

// Cogunluk karari: verilen motor kumesinde en az 'esik' motor isaretlediyse kalem kotu sayilir.
export function cogunluk(esik, kume = MOTOR) {
  const s = { dp: 0, yp: 0, yn: 0, dn: 0 };
  for (const k of KALEM) {
    const kotuDendi = isaretSayisi(k, kume) >= esik;
    if (kotuDendi && k.kotu) s.dp += 1;
    else if (kotuDendi) s.yp += 1;
    else if (k.kotu) s.yn += 1;
    else s.dn += 1;
  }
  s.kesinlik = s.dp + s.yp ? s.dp / (s.dp + s.yp) : 1;
  s.anma = s.dp / KALEM.filter((k) => k.kotu).length;
  return s;
}

export const tekMotor = (m) => cogunluk(1, [m]);

// Gizlilik siniri: dosya yalniz 'acik' kalemlerde gonderilebilir. Digerlerinde ozet sorulur
// ve ozet sorgusu ancak kalem servis tarafinda biliniyorsa bir sonuc dondurur.
export const sorulabilir = (k) => k.gizlilik === 'acik' || k.bilinen;
export const yayimlanan = (k) => k.gizlilik === 'acik';

Yirmi Dört Kalem, On İki Motor

// itibar/olc.mjs — 24 kalem 12 motordan gecirilir; cogunluk esigi ve motor ailesi taranir.
import { MOTOR, KALEM, isaretSayisi, cogunluk, tekMotor, sorulabilir, yayimlanan } from './motor.mjs';

const y = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join('').trimEnd());
const yuzde = (x) => `${(x * 100).toFixed(0)}%`;
const imza = MOTOR.filter((m) => m.aile === 'imza');
const dav = MOTOR.filter((m) => m.aile === 'davranis');

console.log(`${KALEM.length} kalem (${KALEM.filter((k) => k.kotu).length} kotu), ` +
  `${MOTOR.length} motor: ${imza.length} imza + ${dav.length} davranis`);

const A = [-8, 8, 8, 10, 10, 14];
console.log('\n1. kalem basina isaret sayisi');
y(A, 'kalem', 'gercek', 'imza', 'davranis', 'toplam', 'gizlilik');
for (const k of KALEM)
  y(A, k.ad, k.kotu ? 'kotu' : 'temiz', isaretSayisi(k, imza), isaretSayisi(k, dav),
    isaretSayisi(k), k.gizlilik);

const B = [-6, 8, 8, 8, 10, 10];
console.log('\n2. cogunluk esigi taramasi (12 motor)');
y(B, 'esik', 'dogru+', 'yanlis+', 'yanlis-', 'kesinlik', 'anma');
for (let e = 1; e <= MOTOR.length; e += 1) {
  const s = cogunluk(e);
  y(B, e, s.dp, s.yp, s.yn, yuzde(s.kesinlik), yuzde(s.anma));
}

const C = [-24, 8, 8, 8, 10, 10];
console.log('\n3. karar kurallarinin karsilastirmasi');
y(C, 'karar kurali', 'dogru+', 'yanlis+', 'yanlis-', 'kesinlik', 'anma');
const satir = (ad, s) => y(C, ad, s.dp, s.yp, s.yn, yuzde(s.kesinlik), yuzde(s.anma));
const tekler = MOTOR.map((m) => ({ m, s: tekMotor(m) })).filter((x) => x.s.dp > 0);
const enKesin = tekler.reduce((a, b) => (b.s.kesinlik > a.s.kesinlik ? b : a));
satir(`en kesin tek motor (${enKesin.m.ad})`, enKesin.s);
satir('yalniz imza, esik 2', cogunluk(2, imza));
satir('yalniz davranis, esik 2', cogunluk(2, dav));
satir('karma, esik 3', cogunluk(3));
satir('karma, esik 5', cogunluk(5));
satir('karma, esik 7', cogunluk(7));

const ozdes = (kume) => kume.every((_, i) => {
  const a = cogunluk(i + 1, kume), b = tekMotor(kume[kume.length - 1 - i]);
  return a.dp === b.dp && a.yp === b.yp;
});
console.log(`  tek aile icinde cogunluk, tek motor secmekle ozdes mi: ` +
  `imza ${ozdes(imza) ? 'evet' : 'hayir'}, davranis ${ozdes(dav) ? 'evet' : 'hayir'}`);

console.log('\n4. gizlilik siniri ve iz');
const acik = KALEM.filter(yayimlanan), sorulur = KALEM.filter(sorulabilir);
console.log(`  dosyasi gonderilebilen (yayimlanan) kalem  ${acik.length} / ${KALEM.length}`);
console.log(`  ozet sorgusuyla karsilik bulunan kalem     ${sorulur.length - acik.length}`);
console.log(`  hicbir bicimde sorulamayan kalem           ${KALEM.length - sorulur.length}`);
console.log(`    bunlarin kotu olani                      ` +
  `${KALEM.filter((k) => k.kotu && !sorulabilir(k)).length}`);
console.log(`  abone verisi tasidigi icin gonderilemeyen  ` +
  `${KALEM.filter((k) => k.gizlilik === 'abone-verisi').length}`);
console.log(`  karsi tarafa iz birakan gonderim           ${sorulur.length}`);
console.log(`  hedef sistemlerde uretilen kayit           0`);

console.log(`\nhicbir motorun isaretlemedigi kotu kalem  ` +
  `${KALEM.filter((k) => k.kotu && isaretSayisi(k) === 0).length}`);
console.log(`butun motorlarin isaretledigi temiz kalem ` +
  `${KALEM.filter((k) => !k.kotu && isaretSayisi(k) === MOTOR.length).length}`);
console.log(`tek ailenin kor kaldigi kotu kalem        ` +
  `${KALEM.filter((k) => k.kotu && (isaretSayisi(k, imza) === 0 || isaretSayisi(k, dav) === 0)).length}`);
24 kalem (12 kotu), 12 motor: 6 imza + 6 davranis

1. kalem basina isaret sayisi
kalem     gercek    imza  davranis    toplam      gizlilik
k01         kotu       6         6        12          acik
k02         kotu       5         5        10          acik
k03         kotu       4         5         9            ic
k04         kotu       3         4         7          acik
k05         kotu       4         3         7            ic
k06         kotu       2         3         5  abone-verisi
k07         kotu       3         2         5            ic
k08         kotu       2         2         4          acik
k09         kotu       1         2         3            ic
k10         kotu       0         3         3  abone-verisi
k11         kotu       0         0         0            ic
k12         kotu       5         4         9          acik
k13        temiz       0         0         0          acik
k14        temiz       6         0         6            ic
k15        temiz       0         6         6  abone-verisi
k16        temiz       5         0         5            ic
k17        temiz       0         5         5          acik
k18        temiz       4         0         4            ic
k19        temiz       0         4         4  abone-verisi
k20        temiz       3         0         3            ic
k21        temiz       0         3         3          acik
k22        temiz       2         0         2            ic
k23        temiz       0         2         2  abone-verisi
k24        temiz       6         6        12  abone-verisi

2. cogunluk esigi taramasi (12 motor)
esik    dogru+ yanlis+ yanlis-  kesinlik      anma
1           11      11       1       50%       92%
2           11      11       1       50%       92%
3           11       9       1       55%       92%
4            9       7       3       56%       75%
5            8       5       4       62%       67%
6            6       3       6       67%       50%
7            6       1       6       86%       50%
8            4       1       8       80%       33%
9            4       1       8       80%       33%
10           2       1      10       67%       17%
11           1       1      11       50%        8%
12           1       1      11       50%        8%

3. karar kurallarinin karsilastirmasi
karar kurali              dogru+ yanlis+ yanlis-  kesinlik      anma
en kesin tek motor (d5)       11       6       1       65%       92%
yalniz imza, esik 2            9       6       3       60%       75%
yalniz davranis, esik 2       11       6       1       65%       92%
karma, esik 3                 11       9       1       55%       92%
karma, esik 5                  8       5       4       62%       67%
karma, esik 7                  6       1       6       86%       50%
  tek aile icinde cogunluk, tek motor secmekle ozdes mi: imza evet, davranis evet

4. gizlilik siniri ve iz
  dosyasi gonderilebilen (yayimlanan) kalem  8 / 24
  ozet sorgusuyla karsilik bulunan kalem     6
  hicbir bicimde sorulamayan kalem           10
    bunlarin kotu olani                      4
  abone verisi tasidigi icin gonderilemeyen  6
  karsi tarafa iz birakan gonderim           14
  hedef sistemlerde uretilen kayit           0

hicbir motorun isaretlemedigi kotu kalem  1
butun motorlarin isaretledigi temiz kalem 1
tek ailenin kor kaldigi kotu kalem        2

Eşik Neyi Satın Alır

İkinci tablo bütün eşikleri sırayla deniyor ve tek bir satırın hem kesinliği hem anmayı birlikte yükseltmediğini gösteriyor. Bir motorun işaretlemesi yeterli sayılırsa anma yüzde 92’ye çıkar ve kesinlik yüzde 50’de kalır: kötü denilen 22 kalemin yarısı temizdir. Yedi motor istenirse kesinlik yüzde 86’ya çıkar ve anma yüzde 50’ye düşer: altı kötü kalem gözden kaçar.

Bu eğrinin iki ucunda iki kalem duruyor ve ikisi de eşikten bağımsızdır. k11 hiçbir motor tarafından işaretlenmiyor; hangi eşik seçilirse seçilsin kaçar. k24 bütün motorlar tarafından işaretleniyor; hangi eşik seçilirse seçilsin yanlış pozitif kalır. Bu iki kalem, oy saymanın düzeltemeyeceği hata tabanıdır ve raporda “itibar sorgusu karara bağlayamadı” satırıyla değil, başka bir yöntemle ele alınmalıdır.

Eşik seçimi bu yüzden teknik değil, iş kararıdır: bir yanlış pozitifin bedeli bir soruşturma saatiyse eşik aşağı, saha ekibinin geri çağrılmasıysa yukarı çekilir. Aynı tablo iki kurumda iki farklı satırı seçtirir.

Çoğunluk Ne Zaman Bir Şey Ekler

Üçüncü tablonun son satırı bu dersin yapısal bulgusudur: tek aile içinde çoğunluk kararı, tek motor seçmekle özdeştir. Altı imza motorunun ikisinin işaretlemesini istemek, imza ailesinin beşinci motorunu tek başına dinlemekle aynı sonucu verir — aynı doğru pozitif, aynı yanlış pozitif. Kod bunu altı eşiğin hepsinde denetliyor ve iki aile için de evet yazıyor. Nedeni şudur: iç içe geçmiş motorlarda oy saymak, duyarlılık ekseninde bir yer seçmekten başka bir şey değildir. Aynı yönteme bakan on iki motorun oyu, tek bir motorun oyudur.

Karma küme farklı davranıyor ama kazancı koşulludur. Yüzde 92 anmada karma eşik 3, en iyi tek motordan daha kötüdür: aynı 11 doğru pozitife karşılık 9 yanlış pozitif üretir, tek motor 6 üretir. Buna karşılık karma eşik 7, hiçbir tek motorun ulaşamadığı bir kesinliğe çıkar — yüzde 86’ya karşı en iyi tek motorun yüzde 65’i. Kazanç, iki ailenin farklı kalemlerde yanılmasından gelir: bir aileye kör görünen iki kötü kalem öteki aile tarafından işaretleniyor ve bir ailenin ürettiği yanlış pozitifler öteki ailede oy bulamıyor.

Buradan çıkan kural şudur: çoklu motor sonucunu okurken sayılacak olan motor sayısı değil, farklı yöntem sayısıdır. On iki işaretin altısı aynı aileden geliyorsa o altı işaret bir işarettir.

Gönderilemeyen Kalem

Dördüncü blok bedeli veriyor ve bedelin büyük bölümü teknik değildir. Yirmi dört kalemin yalnız sekizinin dosyası gönderilebilir. Altı kalem abone verisi taşıdığı için hiçbir koşulda gönderilemez; bir dosyayı dışarıdaki bir servise yüklemek onu yayımlamaktır ve geri alınamaz. Kalan kalemler için yalnız özet sorgulanabilir, ama özet sorgusu ancak kalem servis tarafında biliniyorsa yanıt verir. Sonuç: on kalem hiçbir biçimde sorulamıyor ve bunların dördü gerçekte kötü.

Bu, önceki derslerdeki kapsam sınırının aynı yapıdaki başka bir biçimidir. Orada kapsam dışı hedefe istek gönderilemiyordu; burada gizlilik sınıfı dışarı çıkamıyor. İkisi de doğrulanamayan aday üretir ve ikisi de raporda “yöntem bu kaleme uygulanamadı” satırıyla yazılır.

Savunmadaki iz sütunu bu derste yine sıfırdır: sorgular hedef sistemlere gitmez. İz başka yere düşer. On dört sorgunun her biri servisin kayıtlarına girer ve o kayıtları izleyebilen biri, hangi kalemin ne zaman soruşturulduğunu öğrenir. Önceki dersin sonunda ayrılan iki iz türünden ikincisi burada en somut halini alır: bir kalemin sorgulanması, o kalemi kullanan tarafa incelendiğini söyleyebilir ve bu bilgi geri alınamaz.

Özet

  • Çoğunluk eşiği yükseldikçe kesinlik yüzde 50’den 86’ya çıkar, anma yüzde 92’den 8’e iner; hiçbir eşik ikisini birlikte yükseltmez ve seçim bir iş kararıdır.
  • İki kalem eşikten bağımsızdır: biri hiçbir motorun işaretlemediği kötü kalem, öteki bütün motorların işaretlediği temiz kalem. Bu ikisi oy saymanın düzeltemediği hata tabanıdır.
  • Tek aile içinde çoğunluk kararı tek motor seçmekle özdeştir; iç içe geçmiş motorlarda oy saymak duyarlılık ekseninde bir yer seçmekten başka bir şey değildir.
  • Karma kümenin kazancı koşulludur: aynı anmada tek motordan daha çok yanlış pozitif üretir, ama yüksek eşikte hiçbir tek motorun ulaşamadığı yüzde 86 kesinliğe çıkar. Sayılacak olan motor sayısı değil farklı yöntem sayısıdır.
  • Yirmi dört kalemin sekizinin dosyası gönderilebilir; altısı abone verisi taşıdığı için hiçbir koşulda gönderilemez ve on kalem hiçbir biçimde sorulamaz. Bunların dördü gerçekte kötüdür.
  • Hedefte üretilen kayıt sıfırdır; on dört sorgu servisin kayıtlarına düşer ve karşı tarafa incelendiğini söyleyebilir.

Sonraki Adım

Buraya kadar beş araç sınıfı aynı sınıra çarptı. Trafik alanları çıkarım bıraktı, çözümleyici şifreli akışta meta veriye düştü, vekil araç kapsam nedeniyle iki adayı bırakmak zorunda kaldı, sanal alan iki kalemi karara bağlayamadı, itibar servisi on kalemi hiç soramadı. Her seferinde aynı boşluk kaldı: bir kalemin gerçekten açık olduğunu göstermenin son adımı yapılmadı.

Sonraki ders o son adımı ele alan araç sınıfını — istismar çerçevelerini — yalnız doğrulama amacıyla ve sınırlarıyla inceler. Ölçülen üç şey vardır: bir çerçevenin neyi kanıtladığı, neyi kanıtlamadığı ve hangi durumda hedefe zarar verdiği. Özellikle ikincisi üzerinde durulur, çünkü başarısız bir doğrulama denemesi açığın olmadığını kanıtlamaz ve bu ayrımın kaybolması raporun en pahalı hatasıdır.

İ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