İçeriğe geç
academia.sh

Ders 10 / 16

Posta Teslim Sorunları

Teslim edilebilirliği bir oran olarak modellemek: geri dönen ileti, şikâyet, ani gönderim artışı ve doğrulama kaydı eksikliğini ayrı ayrı saymak, kara listeye girişin ve toparlanmanın kaç dönem sürdüğünü ölçmek.

İçindekiler

Önceki üç ders adın nereyi gösterdiğini, kimin o adın adına ileti gönderebileceğini ve uyumsuz iletiye ne yapılacağını kayıt düzeyinde kurdu. Üçü de gönderen tarafın ölçüleridir. Bu dersin başladığı yerde iletiler artık uyumludur, imzalıdır ve politika bildirilmiştir — ve hâlâ ulaşmayabilirler.

Alıcı taraf iletiyi yalnız kayıtlara bakarak kabul etmez. Gönderenin geçmişine de bakar: son dönemde kaç iletisi geri döndü, kaç kişi şikâyet etti, hacmi ani mi arttı. Bu geçmişin özetine itibar denir ve bir sayı gibi davranır: yüksekken görünmez, düştüğünde her şeyi belirler. Bölgesel ölçüm ağının saha ekiplerine gönderdiği iş emri bildirimleri bu ölçünün altındadır ve ağ kurgudur.

Teslim Edilebilirlik Bir Orandır

Bir ileti gönderildiğinde üç sonuçtan biri olur: gelen kutusuna ulaşır, geciktirilir ve daha sonra teslim edilir, ya da hiç ulaşmaz. Teslim edilebilirlik, bu üç sonucun oranıdır — bir evet/hayır değil.

Oranı bozan etkenler ayrı ayrı sayılabilir ve dördü birden aynı yöne çeker:

  • Geri dönen ileti oranı. Var olmayan adrese gönderim, listenin bakımsız olduğunu gösterir.
  • Şikâyet oranı. Alıcının iletiyi istenmeyen olarak işaretlemesi, en ağır tekil etkendir.
  • Ani gönderim artışı. Aynı adresten çıkan hacmin birkaç katına çıkması, alışılmış davranıştan sapmadır.
  • Doğrulama kaydı eksikliği. Önceki iki dersin kayıtları eksikse bir olay üretmez; yalnız ulaşılabilecek en yüksek itibarı düşürür.

Son madde bu konudaki halkadır: gönderen doğrulaması kurulmadığında ortaya çıkan zarar bir arıza gibi görünmez, bir tavan gibi davranır.

Bir Dönem Koşumu

AK19. Dönem bir haftadır ve yirmi dönem koşturulur; hacim, oranlar ve eşikler kurgudur. AK20. İtibar tek bir sayı olarak modellenir. AK21. İtibar hızlı düşer, yavaş çıkar: bir dönemde en çok 35 puan iner, 5 puan çıkar. AK22. Kara listeye giriş 35 puanın altında olur; çıkış için 55 puanın üstünde iki dönem beklenir.

// Model: teslim edilebilirlik bir orandır ve itibar üzerinden belirlenir. Dönemler,
// etkenler ve eşikler kurgudur; gerçek bir hizmetin ölçütü değildir.
const BASLANGIC_ITIBAR = 88;
const KARA_LISTE_GIRIS = 35;   // bu değerin altında gönderen adres listeye girer
const KARA_LISTE_CIKIS = 55;   // bu değerin üstünde iki dönem beklenir

// Dönem girdileri: hacim, geri dönen ileti oranı, şikâyet oranı, doğrulama kaydı eksik mi
const DONEMLER = [
  { d: 1,  hacim: 400,  geri: 0.012, sikayet: 0.0004, eksikKayit: true },
  { d: 2,  hacim: 410,  geri: 0.011, sikayet: 0.0005, eksikKayit: true },
  { d: 3,  hacim: 395,  geri: 0.013, sikayet: 0.0004, eksikKayit: true },
  { d: 4,  hacim: 420,  geri: 0.012, sikayet: 0.0006, eksikKayit: true },
  { d: 5,  hacim: 405,  geri: 0.010, sikayet: 0.0004, eksikKayit: true },
  { d: 6,  hacim: 3200, geri: 0.140, sikayet: 0.0040, eksikKayit: true },   // eski liste eklendi
  { d: 7,  hacim: 3100, geri: 0.135, sikayet: 0.0052, eksikKayit: true },
  { d: 8,  hacim: 2900, geri: 0.120, sikayet: 0.0048, eksikKayit: true },
  { d: 9,  hacim: 900,  geri: 0.040, sikayet: 0.0020, eksikKayit: false },  // liste temizlendi
  { d: 10, hacim: 450,  geri: 0.015, sikayet: 0.0008, eksikKayit: false },
  { d: 11, hacim: 430,  geri: 0.011, sikayet: 0.0005, eksikKayit: false },
  { d: 12, hacim: 425,  geri: 0.009, sikayet: 0.0004, eksikKayit: false },
  { d: 13, hacim: 415,  geri: 0.008, sikayet: 0.0003, eksikKayit: false },
  { d: 14, hacim: 420,  geri: 0.008, sikayet: 0.0003, eksikKayit: false },
  { d: 15, hacim: 430,  geri: 0.007, sikayet: 0.0002, eksikKayit: false },
  { d: 16, hacim: 425,  geri: 0.007, sikayet: 0.0002, eksikKayit: false },
  { d: 17, hacim: 440,  geri: 0.006, sikayet: 0.0002, eksikKayit: false },
  { d: 18, hacim: 435,  geri: 0.006, sikayet: 0.0002, eksikKayit: false },
  { d: 19, hacim: 430,  geri: 0.005, sikayet: 0.0001, eksikKayit: false },
  { d: 20, hacim: 445,  geri: 0.005, sikayet: 0.0001, eksikKayit: false },
];

// Bantlar: itibar aralığına göre [gelen kutusu, geciken, hic ulasmayan]
const BANTLAR = [
  [80, [0.98, 0.02, 0.00]],
  [60, [0.88, 0.10, 0.02]],
  [40, [0.65, 0.25, 0.10]],
  [20, [0.35, 0.35, 0.30]],
  [0,  [0.10, 0.30, 0.60]],
];
const KARA_LISTE_BANDI = [0.05, 0.15, 0.80];

const bant = (itibar) => BANTLAR.find(([esik]) => itibar >= esik)[1];
const kirp = (x) => Math.max(0, Math.min(100, x));

const DUSUS_HIZI = 35;         // bir dönemde inebileceği en fazla puan
const TOPARLANMA_HIZI = 5;     // bir dönemde çıkabileceği en fazla puan

let itibar = BASLANGIC_ITIBAR;
let karaListede = false;
let temizDonem = 0;
let onceki = DONEMLER[0].hacim;
const gecmis = [];

for (const g of DONEMLER) {
  const artis = g.hacim / onceki;
  let hedef = 100;
  hedef -= Math.max(0, g.geri - 0.02) * 300;        // geri dönen ileti oranı
  hedef -= Math.max(0, g.sikayet - 0.001) * 5000;   // şikâyet oranı
  hedef -= artis > 3 ? 20 : 0;                      // ani gönderim artışı
  hedef -= g.eksikKayit ? 12 : 0;                   // doğrulama kaydı eksikliği
  hedef = kirp(hedef);
  itibar = hedef > itibar
    ? Math.min(hedef, itibar + TOPARLANMA_HIZI)
    : Math.max(hedef, itibar - DUSUS_HIZI);

  if (!karaListede && itibar < KARA_LISTE_GIRIS) { karaListede = true; temizDonem = 0; }
  else if (karaListede) {
    if (itibar >= KARA_LISTE_CIKIS) temizDonem++; else temizDonem = 0;
    if (temizDonem >= 2) karaListede = false;
  }

  const [ik, gk, uk] = karaListede ? KARA_LISTE_BANDI : bant(itibar);
  gecmis.push({
    ...g, hedef: Math.round(hedef), itibar: Math.round(itibar), karaListede,
    gelen: Math.round(g.hacim * ik),
    geciken: Math.round(g.hacim * gk),
    ulasmayan: Math.round(g.hacim * uk),
  });
  onceki = g.hacim;
}

console.log('donem  hacim  geri%  sikayet%  itibar  kara  gelen  geciken  ulasmayan');
for (const s of gecmis) {
  console.log(
    `d${String(s.d).padStart(2, '0')}`.padEnd(7) + String(s.hacim).padEnd(7) +
    (s.geri * 100).toFixed(1).padEnd(7) + (s.sikayet * 100).toFixed(2).padEnd(10) +
    String(s.itibar).padEnd(8) + (s.karaListede ? 'evet' : '-').padEnd(6) +
    String(s.gelen).padEnd(7) + String(s.geciken).padEnd(9) + String(s.ulasmayan),
  );
}

const toplam = (alan) => gecmis.reduce((t, s) => t + s[alan], 0);
console.log('\ntoplam hacim:', toplam('hacim'), '| gelen kutusu:', toplam('gelen'),
  '| geciken:', toplam('geciken'), '| hic ulasmayan:', toplam('ulasmayan'));
console.log('teslim orani:', (toplam('gelen') / toplam('hacim') * 100).toFixed(1) + '%',
  '| kayip orani:', (toplam('ulasmayan') / toplam('hacim') * 100).toFixed(1) + '%');

const sonrasi = gecmis.filter((s) => s.d >= 10);
const say = (dizi, alan) => dizi.reduce((t, s) => t + s[alan], 0);
console.log('olay sonrasi (d10-d20) hacim:', say(sonrasi, 'hacim'),
  '| geciken:', say(sonrasi, 'geciken'), '| hic ulasmayan:', say(sonrasi, 'ulasmayan'));

const dusus = gecmis.find((s) => s.itibar < 80);
const dip = gecmis.reduce((a, b) => (b.itibar < a.itibar ? b : a));
const donus = gecmis.find((s) => s.d > dip.d && s.itibar >= 80);
console.log('\nitibar dusmeye basladi: d' + dusus.d, '| dip:', dip.itibar, '(d' + dip.d + ')',
  '| kara listede gecen donem:', gecmis.filter((s) => s.karaListede).length);
console.log('bozulma: 1 donem | 80 esigine donus: d' + donus.d,
  '| toparlanma:', donus.d - dip.d, 'donem');
donem  hacim  geri%  sikayet%  itibar  kara  gelen  geciken  ulasmayan
d01    400    1.2    0.04      88      -     392    8        0
d02    410    1.1    0.05      88      -     402    8        0
d03    395    1.3    0.04      88      -     387    8        0
d04    420    1.2    0.06      88      -     412    8        0
d05    405    1.0    0.04      88      -     397    8        0
d06    3200   14.0   0.40      53      -     2080   800      320
d07    3100   13.5   0.52      33      evet  155    465      2480
d08    2900   12.0   0.48      38      evet  145    435      2320
d09    900    4.0    0.20      43      evet  45     135      720
d10    450    1.5    0.08      48      evet  23     68       360
d11    430    1.1    0.05      53      evet  22     65       344
d12    425    0.9    0.04      58      evet  21     64       340
d13    415    0.8    0.03      63      -     365    42       8
d14    420    0.8    0.03      68      -     370    42       8
d15    430    0.7    0.02      73      -     378    43       9
d16    425    0.7    0.02      78      -     374    43       9
d17    440    0.6    0.02      83      -     431    9        0
d18    435    0.6    0.02      88      -     426    9        0
d19    430    0.5    0.01      93      -     421    9        0
d20    445    0.5    0.01      98      -     436    9        0

toplam hacim: 16875 | gelen kutusu: 7682 | geciken: 2278 | hic ulasmayan: 6918
teslim orani: 45.5% | kayip orani: 41.0%
olay sonrasi (d10-d20) hacim: 4745 | geciken: 403 | hic ulasmayan: 1078

itibar dusmeye basladi: d6 | dip: 33 (d7) | kara listede gecen donem: 6
bozulma: 1 donem | 80 esigine donus: d17 | toparlanma: 10 donem

Asimetri

Tek satır bu dersin bütün ağırlığını taşıyor: bozulma bir dönem, toparlanma on dönem.

Olay d06‘da başlıyor. Saha listesine yıllar öncesinden kalma bir adres kümesi ekleniyor; hacim sekiz katına çıkıyor, geri dönen ileti oranı %14’e fırlıyor, şikâyetler artıyor. Üç etken aynı dönemde birden vuruyor ve itibar 88’den 53’e iniyor. Bir dönem sonra 33’e düşüp kara listeye giriyor.

Buradan sonrası artık gönderim davranışıyla ilgili değil. d09’da liste temizleniyor, d10’da hacim normale dönüyor ve oranlar iyi — ama itibar dönem başına yalnız beş puan çıkabiliyor. Adres kara listede altı dönem kalıyor; listeden çıktıktan sonra da 80 eşiğine dönmek dört dönem daha alıyor. Hatanın düzeltilmesi bir dönem sürdü, sonucunun silinmesi on. Bu asimetri kasıtlıdır ve alıcı tarafın işine yarar: hızlı düşen bir ölçü kötüye kullanımı erken durdurur, yavaş çıkan bir ölçü ise iyi davranışın birkaç dönem sürdürülmesini şart koşar.

İkinci sayı bunun bedelini gösteriyor. Olaydan sonraki on bir dönemde, yani gönderim tümüyle normalken, 1.078 ileti hiç ulaşmıyor ve 403 ileti gecikiyor. Bunlar saha ekibine giden iş emri bildirimleridir ve içeriklerinde yanlış hiçbir şey yoktur; yalnız gönderenin geçmişi yüzünden düşerler. Dönem toplamındaki %41’lik kayıp oranı yanıltıcıdır — kaybın büyük bölümü zaten gönderilmemesi gereken iletilerdi. İşin gerçek bedeli, olaydan sonra kaybedilen normal iletilerdir.

Etkenlerin Ayrı Sayılması

Dört etken aynı sayıya vuruyor ama katkıları eşit değil ve modeldeki ağırlıkları bunu gösteriyor.

Geri dönen ileti oranı en büyük tekil kalemdir: %14’te tek başına 36 puan götürür. Şikâyet oranı daha küçük görünen bir sayıyla benzer ağırlık taşır — binde beş şikâyet 21 puan demektir; bu etken az sayıda alıcının kararının çok ağır tartıldığı yerdir. Ani hacim artışı 20 puanlık sabit bir cezadır ve içerikten bağımsızdır: aynı iletiler daha yavaş gönderilseydi bu kalem hiç doğmayacaktı.

Dördüncüsü ötekilerden farklı davranıyor. Doğrulama kaydı eksikliği, ilk beş dönemde hiçbir olay üretmiyor; teslim oranı %98, hiçbir şey görünmüyor. Yaptığı tek şey itibar tavanını 88’de tutmak. Bunun ne anlama geldiği d19 ve d20‘de ortaya çıkıyor: kayıt tamamlandıktan sonra itibar 93’e, sonra 98’e çıkıyor. Yani kayıt eksikken sistem her zaman 12 puan daha alçakta duruyordu ve bir olay geldiğinde kara liste eşiğine 12 puan daha yakındı. Önceki iki dersin kayıtları burada bir savunma değil, bir tampon olarak ölçülüyor.

Akışları Ayırmak ve Getirdiği Yüzey

Koşumdaki bütün kayıp tek bir sayıdan geliyor. İtibar gönderen başına tutulur ve modelde tek bir gönderen var: toplu duyuru da, iş emri bildirimi de aynı ad altından çıkıyor. Toplu listenin bozduğu itibar, saha ekibine giden iş emrini de düşürüyor — iki akış arasında hiçbir bağ olmadığı halde.

Bunun karşılığı akışları ayırmaktır: toplu ve isteğe bağlı gönderim ayrı bir alt ad altından yapılır, işleyişe ait bildirimler kendi adında kalır. Ayrım itibarı da ikiye böler; bir tarafta olan öbür tarafı düşürmez. Modelin yapısı bunu doğrudan söyler, çünkü bantlar itibardan türer ve itibar tek gönderene bağlıdır.

Ayrımın getirdiği yeni yüzey ise ilk üç dersin toplamıdır. Her yeni alt ad kendi kayıt kümesini ister: adres kaydı, gönderen politikası kaydı, imza kaydı, kendi politika bildirimi ve kendi rapor adresi. Bölgedeki kayıt sayısı artar, öksüz kayıt olasılığı artar, yaşam süresi kararı bir kez daha verilir. Birinci derste sayılan envanter kayması, ikinci derste sayılan kayıt eksikliği ve üçüncü derste sayılan hazırlıksız akış — üçü de yeni ad için sıfırdan doğar. Teslim sorununu azaltan adım, bakım yüzeyini iki katına çıkarır ve bu bedel adı ayırma kararının parçasıdır.

Ölçülemeyen Kısım

AK23. Bantlar itibar aralığını doğrudan teslim oranına çevirir. AK24. Modelde gönderen taraf gelen kutusuna ulaşan ileti sayısını görür.

Son varsayım gerçekte tutmaz ve bu konunun ölçülemeyen kısmıdır. Gönderen taraf yalnız iki şeyi bilir: iletinin alıcı tarafça kabul edilip edilmediği ve geri dönen iletiler. Kabul edilmiş bir iletinin gelen kutusuna mı, başka bir yere mi konduğu görünmez. Yukarıdaki tabloda ayrı ayrı sayılan “gelen” ve “geciken” sütunları, işletmede tek bir sütundur: kabul edildi.

İtibarın kendisi de yayınlanmaz. Bir sayı gibi modellenebilir ama okunamaz; her alıcı taraf kendi ölçüsünü tutar ve bu ölçüler birbirinden farklıdır. Kara liste durumu kısmen sorgulanabilir, ama listeye alma kararının hangi eşikle verildiği ve çıkışın ne kadar süreceği dışarıdan bilinmez.

Bu yüzden ölçülebilen tek şey dolaylı göstergelerdir: geri dönen ileti oranı, şikâyet bildirimleri, kendi kontrol adreslerine yapılan gönderimler ve önceki dersin rapor akışı. Dördü de sonucu değil, sonucun gölgesini gösterir. Bir teslim sorununun ne zaman başladığı çoğu kez bir alıcının “bildirim gelmiyor” demesiyle öğrenilir; bu, ölçüm değil ihbardır.

Özet

  • Teslim edilebilirlik bir evet/hayır değil, üç sonucun oranıdır: gelen kutusu, gecikme, hiç ulaşmama.
  • Dört etken ayrı ayrı sayılabilir; modelde geri dönen ileti oranı 36, şikâyet 21, ani hacim artışı 20 puan götürür, doğrulama kaydı eksikliği ise 12 puanlık bir tavan koyar.
  • Bozulma bir dönem sürer, toparlanma on: itibar 88’den 53’e bir dönemde iner, kara listede altı dönem geçer ve 80 eşiğine dönüş dipten sonra on dönem alır.
  • Olaydan sonra gönderim tümüyle normalken bile 1.078 ileti hiç ulaşmaz, 403 ileti gecikir; bunlar içeriğinde hiçbir sorun olmayan iş emri bildirimleridir.
  • Doğrulama kayıtları bir olay engellemez, tavan yükseltir; eksikken sistem kara liste eşiğine sürekli 12 puan daha yakın durur.
  • Ölçülemeyen kısım alıcının kararıdır: gönderen taraf kabul ile reddi görür, gelen kutusuna konup konmadığını görmez ve itibar hiçbir yerde yayınlanmaz.

Sonraki Adım

Bu konu adı kapattı. Ad artık nereyi gösterdiğini biliyor, o adın adına kimin ileti gönderebileceği kayıtlı, uyumsuz iletiye ne yapılacağı bildirilmiş ve teslimin bozulduğu yer ölçülebilir durumda. Dört derste kapatılan kalemlerin hepsi adla ilgiliydi.

Geriye adın gösterdiği şey kalıyor. Bölge dosyasındaki her adres kaydı bir makineye çıkıyor ve o makine, bu konu boyunca hiç sorulmayan bir durumda duruyor: kurulduğu günden beri her yerden erişilebilir. Hangi kapıların dinlendiği, yönetim erişiminin nereden açık olduğu, üzerinde kaç kimlik bilgisinin süresiz durduğu sayılmadı. Sonraki konu ölçeği addan makineye taşır ve aynı soruyu orada sorar: varsayılan kurulum kaç kalem açık bırakıyor?

İ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