İçeriğe geç
academia.sh

Ders 08 / 22

Tehdit İstihbaratı

900 göstergelik kurgu bir besleme ile 12 davranış tanımı 90 günlük pencerede ömür ekseninde karşılaştırılır: adres göstergesinin medyan ömrü 5 gün, dosya karması 2 gün, ad 15 gün; davranış tanımının medyan ömrü 358 gündür. Doksanıncı günde eklenmiş 900 göstergenin yalnız 72'si geçerli, 828'i ölüdür. 60 kurgu temasın gösterge listesiyle 5'i eşleşiyor, 28'inde gösterge o gün listede henüz yok, 27'sinde ömrü dolmuş. Saklamayı 3 günden 90 güne çıkarmak yakalananı 2'den 5'e taşırken ölü eşleşmeyi 2'den 190'a çıkarıyor ve incelemeyi 36 dakikadan 1.755 dakikaya. Davranış tanımları 27 temas yakalıyor, ölü eşleşme üretmiyor; kalem başına yakalama binde 5,6'ya karşı binde 2.250.

İçindekiler

Bir önceki dersin altı hipotezi ortamın kendi verisinden çıktı: taban çizgisi, olağan üst süreç, olağan saat. Hiçbiri “başkalarında ne görüldüğü” bilgisini kullanmadı. O bilgi dışarıdan gelir ve iki ayrı biçimde gelir — tek tek göstergeler ve davranış tanımları.

İkisi bir listede yan yana durduğunda aynı şey gibi görünür; ikisi de “şuna bak” der. Ayrıldıkları yer ömürdür. Bir gösterge belirli bir değerdir ve o değer değişince kullanılamaz hâle gelir; bir davranış tanımı bir yöntemi tarif eder ve yöntem değişmedikçe geçerli kalır. Bu ders farkı gün ve ay cinsinden sayar. Aşağıdaki besleme bir modeldir; hiçbir sağlayıcı, kaynak ya da kampanya adı geçmez ve ömür değerleri veridir.

  • TA38. Besleme 900 gösterge taşır: 420 adres, 380 dosya karması, 100 ad. Her göstergenin eklendiği gün ve bir ömrü vardır.
  • TA39. Ömür üstel dağılımdan çekilir; ortalamalar türe göre 6, 3 ve 21 gündür. Bu sayılar model verisidir.
  • TA40. Bir adres göstergesinin ömrü dolduğunda değer başka bir yere yeniden atanabilir. Model bu olasılığı adreste 0,55, adda 0,10 ve dosya karmasında 0 alır.
  • TA41. Davranış tanımı 12 kalemdir ve ömrü ay ölçüsündedir. Yeniden atanma söz konusu değildir, çünkü tarif edilen şey bir değer değil bir yöntemdir.
  • TA42. Altmış kurgu temas olayı bir göstergeye ve bir güne bağlıdır. Temasların yüzde 15’inin hiçbir davranış tanımı yoktur.

Göstergenin Ömrü

// besleme.mjs — gosterge beslemesinin omru ve 90 gunluk pencerede eslesme. MODELDIR.
// Besleme saglayicisi, kaynak ya da kampanya adi YOKTUR; turler kurgudur.
export const TOHUM = 20260408;
const uretec = (t) => { let s = t >>> 0;
  return () => (s = (s * 1664525 + 1013904223) >>> 0) / 4294967296; };
const r = uretec(TOHUM);
const tam = (n) => Math.floor(r() * n);
export const GUN = 90;

// [tur, kalem sayisi, ortalama omur gun, omru dolunca yeniden atanma olasiligi]
const TUR = [["adres", 420, 6, 0.55], ["dosya karmasi", 380, 3, 0], ["ad", 100, 21, 0.1]];
export const GOSTERGE = [];
for (const [tur, n, omur, atanma] of TUR)
  for (let k = 0; k < n; k++)
    GOSTERGE.push({ tur, eklendi: tam(GUN), omur: Math.max(1, Math.round(-omur * Math.log(1 - r()))),
      atanir: r() < atanma });

// Davranis tanimi: bir yontemi tarif eder, tek bir degeri degil. Omru ay olcusundedir.
export const DAVRANIS = Array.from({ length: 12 }, (_, i) => ({
  id: `d${i + 1}`, eklendi: tam(GUN), omur: 120 + tam(420), kapsam: 30 + tam(60) }));

// Kurgu temas olaylari: her biri bir gostergeye ve bir gune baglidir.
export const TEMAS = Array.from({ length: 60 }, () => ({
  gun: tam(GUN), g: tam(GOSTERGE.length),
  d: r() < 0.85 ? tam(DAVRANIS.length) : -1 }));   // yuzde 15'inin davranis tanimi yok

export const gecerli = (x, gun) => gun >= x.eklendi && gun <= x.eklendi + x.omur;
const ortanca = (v) => v.slice().sort((a, b) => a - b)[Math.floor(v.length / 2)];

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 yt = gen([16, 9, 13, 14, 16]);
  console.log(`model (tohum ${TOHUM}): ${GOSTERGE.length} gosterge, ${DAVRANIS.length} davranis ` +
    `tanimi, ${GUN} gunluk pencere, ${TEMAS.length} kurgu temas`);
  console.log();
  console.log(yt(["tur", "kalem", "medyan omur", "ort. omur", "yeniden atanan"]));
  for (const [tur] of TUR) {
    const l = GOSTERGE.filter((g) => g.tur === tur);
    console.log(yt([tur, l.length, `${ortanca(l.map((g) => g.omur))} gun`,
      `${(l.reduce((a, g) => a + g.omur, 0) / l.length).toFixed(1)} gun`,
      l.filter((g) => g.atanir).length]));
  }
  console.log(yt(["davranis tanimi", DAVRANIS.length, `${ortanca(DAVRANIS.map((d) => d.omur))} gun`,
    `${(DAVRANIS.reduce((a, d) => a + d.omur, 0) / DAVRANIS.length).toFixed(1)} gun`, 0]));

  const yo = gen([16, 10, 16, 10, 13]);
  console.log();
  console.log(yo(["omur araligi", "adres", "dosya karmasi", "ad", "toplam pay"]));
  for (const [alt, ust] of [[1, 2], [3, 7], [8, 14], [15, 30], [31, 9999]]) {
    const ic = (l) => l.filter((g) => g.omur >= alt && g.omur <= ust).length;
    const hep = ic(GOSTERGE);
    console.log(yo([ust > 999 ? `${alt}+ gun` : `${alt}-${ust} gun`,
      ic(GOSTERGE.filter((g) => g.tur === "adres")),
      ic(GOSTERGE.filter((g) => g.tur === "dosya karmasi")),
      ic(GOSTERGE.filter((g) => g.tur === "ad")),
      `%${(100 * hep / GOSTERGE.length).toFixed(1)}`]));
  }

  const yg = gen([8, 12, 15, 12, 18]);
  console.log();
  console.log(yg(["gun", "eklenmis", "gecerli gost.", "olu gost.", "gecerli davranis"]));
  for (const g of [0, 15, 30, 45, 60, 89]) {
    const ge = GOSTERGE.filter((x) => gecerli(x, g)).length;
    const ek = GOSTERGE.filter((x) => x.eklendi <= g).length;
    console.log(yg([g, ek, ge, ek - ge, DAVRANIS.filter((x) => gecerli(x, g)).length]));
  }
  const yakalanan = TEMAS.filter((t) => gecerli(GOSTERGE[t.g], t.gun));
  const erken = TEMAS.filter((t) => t.gun < GOSTERGE[t.g].eklendi);
  console.log(`\n${TEMAS.length} temasin ${yakalanan.length} tanesi gosterge listesiyle ` +
    `eslesiyor; ${erken.length} tanesinde gosterge o gun listede henuz yok, ` +
    `${TEMAS.length - yakalanan.length - erken.length} tanesinde gostergenin omru dolmus`);
}
model (tohum 20260408): 900 gosterge, 12 davranis tanimi, 90 gunluk pencere, 60 kurgu temas

tur                 kalem  medyan omur     ort. omur  yeniden atanan
adres                 420        5 gun       6.6 gun             239
dosya karmasi         380        2 gun       3.0 gun               0
ad                    100       15 gun      22.5 gun              11
davranis tanimi        12      358 gun     317.4 gun               0

omur araligi         adres   dosya karmasi        ad   toplam pay
1-2 gun                126             220        15        %40.1
3-7 gun                156             129        16        %33.4
8-14 gun                96              31        18        %16.1
15-30 gun               38               0        28         %7.3
31+ gun                  4               0        23         %3.0

gun         eklenmis  gecerli gost.   olu gost.  gecerli davranis
0                  9              9           0                 0
15               142             58          84                 3
30               285             77         208                 4
45               455             77         378                 6
60               622             73         549                 8
89               900             72         828                12

60 temasin 5 tanesi gosterge listesiyle eslesiyor; 28 tanesinde gosterge o gun listede henuz yok, 27 tanesinde gostergenin omru dolmus

İlk tablo ömür farkını doğrudan veriyor: dosya karmasının medyan ömrü iki gün, adresin beş gün, adın on beş gün. Davranış tanımının medyan ömrü 358 gündür — aynı eksende yaklaşık yetmiş kat uzun. Bu, davranış tanımının daha iyi olduğu anlamına gelmez; iki kalemin aynı listede aynı işlemle yönetilemeyeceği anlamına gelir.

Ömür dağılımı tablosu ortalamanın gizlediğini açıyor. Beslemenin yüzde 40’ı bir ya da iki gün içinde ölüyor ve bu bölümün büyük çoğunluğu dosya karmasıdır: 380 karmanın 220’si iki günden kısa ömürlüdür ve hiçbiri on beş günü geçmez. Adlar ters uçtadır — 100 adın 51’i on beş günden uzun yaşar. Üç tür aynı listede taşınırsa, listenin tamamı için tek bir saklama süresi seçmek üç türden en az ikisini yanlış yönetir.

Dağılımın bu biçimi bir işlem kararına da bağlanır: kalemlerin yüzde 73’ü bir haftadan kısa ömürlü olduğu için beslemeyi günde bir kez almak, kalemlerin önemli bir bölümünü hiç geçerli olmadığı bir anda listeye eklemek demektir. Beslemenin alınma sıklığı, kalemin ömrüyle aynı ölçekte olmadıkça, liste boyutu artar ama kapsama artmaz.

İkinci tablo listenin nasıl davrandığını gösteriyor. Doksanıncı günde 900 göstergenin tamamı eklenmiştir ama yalnız 72’si geçerlidir; 828’i ölüdür. Liste doğrusal büyür, geçerli bölümü ise otuzuncu günden sonra 72–77 arasında düz kalır. Bir gösterge beslemesinin boyutu onun gücüyle ilgili bir sayı değildir; güç, o listede o gün hâlâ geçerli olan kalem sayısıdır.

Son satır ilk sonucu veriyor: 60 temasın yalnız 5’i gösterge listesiyle eşleşiyor. Kaçırmanın iki nedeni neredeyse eşit paylaşıyor — 28 temasta gösterge o gün listede henüz yoktur, 27 temasta ömrü dolmuştur. Birinci sayı beslemenin gecikmesini, ikinci sayı göstergenin kısa ömrünü ölçer ve ikisi ayrı işlerdir: birincisi daha hızlı besleme, ikincisi daha uzun ömürlü bir ölçüt ister.

Saklama Süresi ve Davranışla Karşılaştırma

// omur.mjs — saklama suresi taramasi, olu gostergenin yanlis pozitifi ve davranisla karsilastirma.
import { GOSTERGE, DAVRANIS, TEMAS, GUN, gecerli } from "./besleme.mjs";

const uretec = (t) => { let s = t >>> 0;
  return () => (s = (s * 1664525 + 1013904223) >>> 0) / 4294967296; };
const INCELEME = 9, BAKIM_KALEM = 0.2, BAKIM_DAVRANIS = 30;

// Bir gosterge listede eklendi..eklendi+S gunleri arasinda tutulur.
// Omru dolduktan sonra listede kalirsa ve deger yeniden atanmissa mesru trafikle eslesir.
function tarama(S) {
  const r = uretec(4413571);
  let yp = 0, liste = 0;
  for (const g of GOSTERGE) {
    liste += Math.min(S, GUN - g.eklendi);
    for (let d = g.eklendi + g.omur + 1; d <= Math.min(g.eklendi + S, GUN - 1); d++)
      if (g.atanir && r() < 0.02) yp++;
  }
  const yakalanan = TEMAS.filter((t) => {
    const g = GOSTERGE[t.g];
    return t.gun >= g.eklendi && t.gun <= g.eklendi + Math.min(S, g.omur);
  }).length;
  return { liste: Math.round(liste / GUN), yakalanan, yp,
    bakim: Math.round(GOSTERGE.length * BAKIM_KALEM) };
}

const gen = (B) => (h) => h.map((v, j) => (j ? String(v).padStart(B[j])
  : String(v).padEnd(B[0]))).join("");
const yz = gen([24, 14, 16, 16, 14, 13]);
console.log(yz(["besleme / saklama", "liste boyu", "yakalanan temas", "olu eslesme",
  "inceleme dk", "bakim dk"]));
for (const S of [3, 7, 14, 30, 90]) {
  const t = tarama(S);
  console.log(yz([`gosterge, ${S} gun`, t.liste, `${t.yakalanan}/${TEMAS.length}`, t.yp,
    (t.yakalanan + t.yp) * INCELEME, t.bakim]));
}
const dav = TEMAS.filter((t) => t.d >= 0 && gecerli(DAVRANIS[t.d], t.gun)).length;
const tanimsiz = TEMAS.filter((t) => t.d < 0).length;
console.log(yz(["davranis tanimi", DAVRANIS.length, `${dav}/${TEMAS.length}`, 0,
  dav * INCELEME, DAVRANIS.length * BAKIM_DAVRANIS]));

const en = [3, 7, 14, 30, 90].map(tarama);
console.log(`\ngosterge listesinde saklama 3 gunden 90 gune cikinca yakalanan ` +
  `${en[0].yakalanan} -> ${en[4].yakalanan}, olu eslesme ${en[0].yp} -> ${en[4].yp}`);
console.log(`${TEMAS.length} temasin ${tanimsiz} tanesinin davranis tanimi hic yok; ` +
  `${TEMAS.length - dav - tanimsiz} tanesinde tanim var ama temas gununde henuz eklenmemis`);
const kalemBasi = (n, k) => (n / k * 1000).toFixed(1);
console.log(`kalem basina yakalama (binde): gosterge ` +
  `${kalemBasi(en[4].yakalanan, GOSTERGE.length)}, davranis ` +
  `${kalemBasi(dav, DAVRANIS.length)}`);
besleme / saklama           liste boyu yakalanan temas     olu eslesme   inceleme dk     bakim dk
gosterge, 3 gun                     30            2/60               2            36          180
gosterge, 7 gun                     68            4/60              13           153          180
gosterge, 14 gun                   131            4/60              45           441          180
gosterge, 30 gun                   255            5/60             101           954          180
gosterge, 90 gun                   451            5/60             190          1755          180
davranis tanimi                     12           27/60               0           243          360

gosterge listesinde saklama 3 gunden 90 gune cikinca yakalanan 2 -> 5, olu eslesme 2 -> 190
60 temasin 10 tanesinin davranis tanimi hic yok; 23 tanesinde tanim var ama temas gununde henuz eklenmemis
kalem basina yakalama (binde): gosterge 5.6, davranis 2250.0

Saklama taraması beşinci dersin eğrisini başka bir eksende tekrarlıyor. Saklamayı üç günden doksan güne çıkarmak yakalananı 2’den 5’e taşıyor; aynı adımda ölü eşleşme 2’den 190’a, inceleme yükü 36 dakikadan 1.755 dakikaya çıkıyor. Üç ek yakalama için 188 ek yanlış eşleşme ödeniyor ve bunun tamamı, ömrü dolmuş adres göstergelerinin yeniden atanmış değerlerle çakışmasından gelir. Bu satır şunu söyler: bir gösterge listesinin en pahalı bölümü, temizlenmemiş bölümüdür.

On dört ile otuz gün arasında yakalanan sabit kalıyor ama ölü eşleşme 45’ten 101’e çıkıyor. Bu aralıkta saklamayı uzatmak hiçbir şey kazandırmaz ve maliyeti iki katına çıkarır. Bir beslemenin saklama süresi, beslemenin ömür dağılımından okunur; kalemlerin çoğu bir haftada ölüyorsa listeyi otuz gün tutmanın karşılığı yoktur. Liste boyu sütunu aynı şeyi başka bir birimle söylüyor: üç günlük saklamada ortalama liste 30 kalem, doksan günlükte 451 kalemdir ve bu on beş katlık büyüme karşılığında yakalanan yalnız 2’den 5’e çıkar.

Davranış satırı ölçünün asıl sonucudur. On iki kalem 27 temas yakalıyor, ölü eşleşme üretmiyor ve 243 dakika inceleme istiyor — 900 kalemlik gösterge listesi 5 temas yakalayıp 1.755 dakika istiyordu. Kalem başına yakalama binde 5,6’ya karşı binde 2.250’dir. Bakım dakikası davranış tarafında daha yüksektir (360’a karşı 180), çünkü bir davranış tanımını gözden geçirmek bir değeri listeden silmekten çok daha uzun sürer; ama o bakım on iki kalem içindir, dokuz yüz için değil.

Bu karşılaştırma iki beslemenin birbirinin yerine geçtiği anlamına gelmez. Gösterge, eşleştiğinde kesin bir eşleşmedir: bir değer ya listede vardır ya yoktur ve inceleme birkaç dakikada biter. Davranış tanımı bir tarif olduğu için eşleşmesi de bir yorum gerektirir ve bu dersin modelinde inceleme süresi ikisi için de eşit alınmıştır — gerçekte davranış eşleşmesinin incelemesi daha uzundur. Ölçünün söylediği şey şudur: aynı bakım dakikası davranış tarafında daha çok temas karşılar ve gösterge tarafı ancak beslemenin gecikmesi ömürden kısa olduğunda işe yarar.

Davranış tarafının da kaçırdığı vardır ve son satır onu yazıyor: 60 temasın 10’unun hiçbir davranış tanımı yoktur, 23’ünde tanım vardır ama temas gününde henüz eklenmemiştir. İkinci sayı gösterge tarafındaki gecikmenin karşılığıdır ve davranış tanımları daha yavaş yazıldığı için orada daha büyüktür. Bir davranış tanımı uzun ömürlüdür, ama geç doğar.

Özet

  • Gösterge ömrü gün, davranış tanımı ömrü ay ölçüsündedir: medyan 2–15 güne karşı 358 gün; ikisi aynı listede aynı işlemle yönetilemez.
  • Doksanıncı günde eklenmiş 900 göstergenin yalnız 72’si geçerlidir; liste doğrusal büyürken geçerli bölümü otuzuncu günden sonra düz kalır.
  • 60 temasın yalnız 5’i gösterge listesiyle eşleşiyor; 28’inde gösterge henüz eklenmemiş, 27’sinde ömrü dolmuştur ve bu iki neden iki ayrı iş gerektirir.
  • Saklamayı 3 günden 90 güne çıkarmak yakalananı 2’den 5’e taşırken ölü eşleşmeyi 2’den 190’a, incelemeyi 36 dakikadan 1.755 dakikaya çıkarıyor; 14 ile 30 gün arasında yakalanan hiç artmıyor.
  • On iki davranış tanımı 27 temas yakalıyor ve ölü eşleşme üretmiyor; kalem başına yakalama binde 5,6’ya karşı binde 2.250’dir.
  • Davranış tanımı geç doğar: 60 temasın 23’ünde tanım vardır ama temas gününde henüz eklenmemiştir, 10’unun hiçbir tanımı yoktur.

Sonraki Adım

Sekiz ders boyunca hattın her adımı sayıldı: kaynaklar birleştirildi, kurallar yazıldı, eşik seçildi, hipotez koşturuldu ve dışarıdan gelen bilgi ömür ekseninde ayrıldı. Ortaya çıkan sayıların hepsi aynı yere bakıyor — analist dakikası. Sekizinci derste doksan günlük saklama 1.755 dakika, altıncı derste ikinci sürüm günde 513 dakika istedi ve birinci derste günlük kapasite 1.440 dakikaydı. Bu derslerin hiçbirinde uyarının doğru çıkmasından sonrası ele alınmadı. Sonraki ders konuyu kapatır ve yinelenen müdahalenin otomatikleştirilmesini iki sayıyla birlikte ölçer: kazanılan dakika ve yanlış otomatik eylemin bedeli.

İ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