İçeriğe geç
academia.sh

Ders 09 / 10

Fiyatlandırma Modelleri

İsteğe bağlı, ayrılmış ve kesintili kapasitenin aynı yük profilinde koşturulması: toplam maliyet, geri alınan kapasite yüzünden yeniden koşan iş, kullanılmayan taahhüt, liste fiyatı ile etkin birim fiyat arasındaki fark ve pencerenin ortasında çıkıldığında kalan yükümlülük.

İçindekiler

Önceki ders maliyeti bir sütun olarak saydı ve on iki kararın hiçbirinin onu yükseltmediğini buldu. Bunun nedeni kararların kötülüğü değil, hepsinin ne kiralandığı üzerine olmasıydı. Bu dersin sorusu farklı: aynı kapasite, aynı saat, aynı iş — hangi koşulla kiralanıyor.

Üç koşul vardır. İsteğe bağlı kapasite istendiği anda alınır ve bırakıldığı anda ödemesi biter; hiçbir karar devredilmez ve birim fiyat en yüksektir. Ayrılmış kapasite belirli bir miktarın pencere boyunca ödeneceği taahhüdüne karşılık indirim verir; devredilen karar kapasiteyi küçültme kararıdır. Kesintili kapasite en büyük indirimi verir ama sağlayıcı kapasiteyi geri isteyebilir; devredilen karar işin ne zaman kesileceği kararıdır. Aşağıdaki ölçüm bu üç koşulu aynı yük altında koşturur.

Üç Model ve Yük Profilleri

  • BC19. Fiyatlar kurgudur ve kurgu birim/kb-saat cinsindendir: isteğe bağlı 1,00, ayrılmış 0,62, kesintili 0,28. Gerçek bir para birimi ya da fiyat listesi kullanılmaz.
  • BC20. Pencere 168 saattir. Öngörülemez profil kendi yazılan üreteçle üretilir; tohum 20260804 görünürdür ve her koşum aynı diziyi verir.
  • BC21. Ayrılmış taahhüt R, ortalama talebin yuvarlanmışıdır ve pencere boyunca kullanılsa da kullanılmasa da ödenir; R’yi aşan talep isteğe bağlı karşılanır.
  • BC22. Kesintili kapasitenin geri alınma olasılığı yüke bağlıdır: p=0,02+0,40(talep/120)p = 0{,}02 + 0{,}40 \cdot (talep / 120), en çok 0,45.
  • BC23. Kesintili kapasitede yalnız ertelenebilir iş koşar. Ertelenebilir pay profile göre 0,45 / 0,60 / 0,10’dur, çünkü üç profili üreten iş türleri farklıdır.
  • BC24. Geri alınan kapasitenin yaptığı iş kaybolur ve isteğe bağlı kapasitede yeniden koşar; yeniden koşma katsayısı 2,5’tir (ara durumun kaybı ve yeniden kuyruğa girme).
// fiyat/model.mjs — fiyatlandirma MODELIDIR. Fiyatlar KURGUDUR ve kurgu `birim/kb-saat`
// cinsindendir; gercek bir para birimi, saglayici ya da fiyat listesi kullanilmaz.
export function uretec(tohum) {                    // kendi yazilan uretec, tohum gorunur
  let s = tohum >>> 0;
  return () => ((s = (Math.imul(s, 1664525) + 1013904223) >>> 0) / 4294967296);
}
export const TOHUM = 20260804, SAAT = 168;         // bir haftalik pencere

export const FIYAT = { istege: 1.00, ayrilmis: 0.62, kesintili: 0.28 };  // kurgu birim/kb-saat
export const YENIDEN = 2.5;                        // geri alinan isin yeniden kosma katsayisi
export const PAZAR_TEPE = 120;                     // kurgu: geri alma olasiliginin olcek noktasi
export const geriAlma = (d) => Math.min(0.45, 0.02 + 0.40 * (d / PAZAR_TEPE));

// profil: talep dizisi + ertelenebilir pay (profilin kaynagi farkli is oldugu icin farkli)
export function profiller() {
  const r = uretec(TOHUM);
  const duz = Array.from({ length: SAAT }, () => 40);
  const tepe = Array.from({ length: SAAT }, (_, t) => (t % 24 >= 2 && t % 24 <= 4 ? 120 : 20));
  const ong = Array.from({ length: SAAT }, () =>
    (r() < 0.6 ? Math.round(r() * 6) : 55 + Math.round(r() * 85)));
  return { duz: [duz, 0.45], "tepe-yapan": [tepe, 0.60], ongorulemez: [ong, 0.10] };
}

export function kos(model, talep, ertelenebilir) {
  const R = Math.round(talep.reduce((a, b) => a + b, 0) / talep.length);   // taahhut = ort. talep
  let maliyet = 0, kayip = 0, bosTaahhut = 0, yenidenBedel = 0;
  for (const d of talep) {
    if (model === "istege-bagli") maliyet += d * FIYAT.istege;
    else if (model === "ayrilmis") {
      maliyet += R * FIYAT.ayrilmis + Math.max(0, d - R) * FIYAT.istege;
      bosTaahhut += Math.max(0, R - d);
    } else {
      const q = d * ertelenebilir, p = geriAlma(d), k = q * p;
      maliyet += q * (1 - p) * FIYAT.kesintili + k * YENIDEN * FIYAT.istege
        + (d - q) * FIYAT.istege;
      kayip += k; yenidenBedel += k * YENIDEN * FIYAT.istege;
    }
  }
  return { model, maliyet, kayip, bosTaahhut, yenidenBedel, R };
}
export const MODEL = ["istege-bagli", "ayrilmis", "kesintili"];

Aynı Profilde Üç Koşum

// fiyat/kosum.mjs — uc model ayni yuk profilinde kosturulur; toplam maliyet, kesintilide
// kaybedilen is ve ayrilmista kullanilmayan taahhut birlikte sayilir
import { profiller, kos, MODEL, SAAT, TOHUM, FIYAT } from "./model.mjs";

const s = (x, n) => String(x).padStart(n);
const y = (x, n = 2) => x.toFixed(n);
const P = profiller();

console.log(`tohum ${TOHUM}, pencere ${SAAT} saat; fiyatlar KURGU birim/kb-saat: ` +
  `istege ${y(FIYAT.istege)}, ayrilmis ${y(FIYAT.ayrilmis)}, kesintili ${y(FIYAT.kesintili)}.`);
console.log();
console.log("profil       | toplam talep | ort | en dusuk | en yuksek | ertelenebilir pay | taahhut R");
console.log("-------------|--------------|-----|----------|-----------|-------------------|----------");
for (const [ad, [t, e]] of Object.entries(P)) {
  const top = t.reduce((a, b) => a + b, 0);
  console.log(`${ad.padEnd(12)} | ${s(top, 12)} | ${s(y(top / SAAT, 1), 3)} | ${s(Math.min(...t), 8)} | ` +
    `${s(Math.max(...t), 9)} | ${s(y(e), 17)} | ${s(kos("ayrilmis", t, e).R, 9)}`);
}

console.log();
console.log("profil       | model        | toplam maliyet | kaybedilen is | yeniden kosma | bos taahhut");
console.log("-------------|--------------|----------------|---------------|---------------|------------");
const kazanan = {};
for (const [ad, [t, e]] of Object.entries(P)) {
  let en = null;
  for (const m of MODEL) {
    const r = kos(m, t, e);
    if (en === null || r.maliyet < en.maliyet) en = r;
    console.log(`${ad.padEnd(12)} | ${m.padEnd(12)} | ${s(y(r.maliyet), 14)} | ` +
      `${s(r.kayip ? y(r.kayip, 1) : "-", 13)} | ${s(r.yenidenBedel ? y(r.yenidenBedel) : "-", 13)} | ` +
      `${s(r.bosTaahhut ? y(r.bosTaahhut, 1) : "-", 11)}`);
  }
  kazanan[ad] = en;
}

console.log();
console.log("profil       | kazanan      | ikinciye fark | ikinciye oran | en pahaliya fark");
console.log("-------------|--------------|---------------|---------------|-----------------");
for (const [ad, [t, e]] of Object.entries(P)) {
  const sirali = MODEL.map((m) => kos(m, t, e)).sort((a, b) => a.maliyet - b.maliyet);
  const [a, b, c] = sirali;
  console.log(`${ad.padEnd(12)} | ${a.model.padEnd(12)} | ${s(y(b.maliyet - a.maliyet), 13)} | ` +
    `${s(`%${y((100 * (b.maliyet - a.maliyet)) / a.maliyet, 1)}`, 13)} | ` +
    `${s(`%${y((100 * (c.maliyet - a.maliyet)) / a.maliyet, 1)}`, 16)}`);
}
console.log(`uc profilde kazanan model: ${Object.values(kazanan).map((k) => k.model).join(", ")}.`);
tohum 20260804, pencere 168 saat; fiyatlar KURGU birim/kb-saat: istege 1.00, ayrilmis 0.62, kesintili 0.28.

profil       | toplam talep | ort | en dusuk | en yuksek | ertelenebilir pay | taahhut R
-------------|--------------|-----|----------|-----------|-------------------|----------
duz          |         6720 | 40.0 |       40 |        40 |              0.45 |        40
tepe-yapan   |         5460 | 32.5 |       20 |       120 |              0.60 |        33
ongorulemez  |         7430 | 44.2 |        0 |       138 |              0.10 |        44

profil       | model        | toplam maliyet | kaybedilen is | yeniden kosma | bos taahhut
-------------|--------------|----------------|---------------|---------------|------------
duz          | istege-bagli |        6720.00 |             - |             - |           -
duz          | ayrilmis     |        4166.40 |             - |             - |           -
duz          | kesintili    |        5572.09 |         463.7 |       1159.20 |           -
tepe-yapan   | istege-bagli |        5460.00 |             - |             - |           -
tepe-yapan   | ayrilmis     |        5264.28 |             - |             - |      1911.0
tepe-yapan   | kesintili    |        4850.46 |         787.9 |       1969.80 |           -
ongorulemez  | istege-bagli |        7430.00 |             - |             - |           -
ongorulemez  | ayrilmis     |        8528.04 |             - |             - |      3907.0
ongorulemez  | kesintili    |        7475.12 |         261.3 |        653.25 |           -

profil       | kazanan      | ikinciye fark | ikinciye oran | en pahaliya fark
-------------|--------------|---------------|---------------|-----------------
duz          | ayrilmis     |       1405.69 |         %33.7 |            %61.3
tepe-yapan   | kesintili    |        413.82 |          %8.5 |            %12.6
ongorulemez  | istege-bagli |         45.12 |          %0.6 |            %14.8
uc profilde kazanan model: ayrilmis, kesintili, istege-bagli.

Son satır bu dersin bulgusudur: üç profilde üç ayrı model kazanıyor. Düz profilde ayrılmış kapasite 4.166,40 birimle isteğe bağlının yüzde 61,3 altında; taahhüt tam olarak kullanıldığı için boş taahhüt sıfır. Tepe yapan profilde ayrılmış kapasite kaybediyor, çünkü taahhüt ortalamaya kuruluyor ve talebin yüzde 87,5’i o ortalamanın altında geçiyor: 1.911 kb-saat ödendiği hâlde kullanılmıyor. Öngörülemez profilde ise hiçbir devir işe yaramıyor ve en pahalı liste fiyatı olan isteğe bağlı kapasite 7.430,00 birimle kazanıyor.

Kesintili kapasitenin iki gizli kalemi orta tabloda ayrı sütunlarda duruyor. Düz profilde 463,7 kb-saatlik iş geri alınan kapasiteyle birlikte kayboluyor ve yeniden koşturmak 1.159,20 birim tutuyor — modelin toplam maliyetinin beşte birinden fazlası. Tepe yapan profilde kayıp 787,9 kb-saat ve yeniden koşma 1.969,80 birim; bu profil kazanıyor olmasına rağmen maliyetinin yüzde 40’ı geri alınan işin bedelidir. Kesintili kapasitenin fiyatı listede değil, geri alma oranındadır.

Öngörülemez profilin kesintili satırı bu kalemin ikinci yüzünü gösteriyor: kaybedilen iş 261,3 kb-saatle üç profilin en düşüğü, ama model yine de kaybediyor (7.475,12’ye karşı 7.430,00). Sebebi kayıp değil, kazancın tavanıdır — o profilde ertelenebilir pay 0,10, yani indirim talebin yalnız onda birine uygulanabiliyor. Bir indirim ancak dokunabildiği paya kadar indirimdir.

Üçüncü tablo farkların büyüklüğünü veriyor. Düz profilde kazanan ikinciyi yüzde 33,7 geçiyor: model seçimi burada gerçek bir karardır. Öngörülemez profilde fark yüzde 0,6’ya iniyor — üç modelin maliyeti neredeyse aynıdır ve seçimi maliyet değil risk belirler.

Etkin Birim Fiyat ve Çıkışın Bedeli

Liste fiyatı bir kiralamanın ne kadara mal olduğunu söylemez. Ölçülmesi gereken etkin birim fiyattır: toplam maliyetin karşılanan toplam talebe bölümü.

// fiyat/cikis.mjs — etkin birim fiyat, devredilen karar ve pencerenin ortasinda cikmanin bedeli
import { profiller, kos, MODEL, SAAT, FIYAT } from "./model.mjs";

const s = (x, n) => String(x).padStart(n);
const y = (x, n = 3) => x.toFixed(n);
const P = profiller(), CIKIS = 84;                  // pencerenin ortasinda kiralamadan cikilir
const DEVIR = { "istege-bagli": 0, ayrilmis: 1, kesintili: 2 };
const LISTE = { "istege-bagli": FIYAT.istege, ayrilmis: FIYAT.ayrilmis, kesintili: FIYAT.kesintili };

console.log("profil       | model        | liste | etkin birim | listeye gore | devredilen karar");
console.log("-------------|--------------|-------|-------------|--------------|-----------------");
for (const [ad, [t, e]] of Object.entries(P)) {
  const top = t.reduce((a, b) => a + b, 0);
  for (const m of MODEL) {
    const etkin = kos(m, t, e).maliyet / top;
    console.log(`${ad.padEnd(12)} | ${m.padEnd(12)} | ${s(y(LISTE[m], 2), 5)} | ${s(y(etkin), 11)} | ` +
      `${s(`x${y(etkin / LISTE[m], 2)}`, 12)} | ${s(DEVIR[m], 17)}`);
  }
}

console.log();
console.log(`pencerenin ${CIKIS}. saatinde cikildiginda kalan yukumluluk (kurgu birim):`);
console.log("profil       | istege-bagli | kesintili | ayrilmis (kalan taahhut) | ayrilmis kazancinin orani");
console.log("-------------|--------------|-----------|--------------------------|--------------------------");
for (const [ad, [t, e]] of Object.entries(P)) {
  const r = kos("ayrilmis", t, e), tam = kos("istege-bagli", t, e);
  const kalan = (SAAT - CIKIS) * r.R * FIYAT.ayrilmis;
  const kazanc = tam.maliyet - r.maliyet;
  console.log(`${ad.padEnd(12)} | ${s(0, 12)} | ${s(0, 9)} | ${s(y(kalan, 2), 24)} | ` +
    `${s(kazanc > 0 ? `%${y((100 * kalan) / kazanc, 1)}` : "kazanc yok", 25)}`);
}
profil       | model        | liste | etkin birim | listeye gore | devredilen karar
-------------|--------------|-------|-------------|--------------|-----------------
duz          | istege-bagli |  1.00 |       1.000 |        x1.00 |                 0
duz          | ayrilmis     |  0.62 |       0.620 |        x1.00 |                 1
duz          | kesintili    |  0.28 |       0.829 |        x2.96 |                 2
tepe-yapan   | istege-bagli |  1.00 |       1.000 |        x1.00 |                 0
tepe-yapan   | ayrilmis     |  0.62 |       0.964 |        x1.56 |                 1
tepe-yapan   | kesintili    |  0.28 |       0.888 |        x3.17 |                 2
ongorulemez  | istege-bagli |  1.00 |       1.000 |        x1.00 |                 0
ongorulemez  | ayrilmis     |  0.62 |       1.148 |        x1.85 |                 1
ongorulemez  | kesintili    |  0.28 |       1.006 |        x3.59 |                 2

pencerenin 84. saatinde cikildiginda kalan yukumluluk (kurgu birim):
profil       | istege-bagli | kesintili | ayrilmis (kalan taahhut) | ayrilmis kazancinin orani
-------------|--------------|-----------|--------------------------|--------------------------
duz          |            0 |         0 |                  2083.20 |                     %81.6
tepe-yapan   |            0 |         0 |                  1718.64 |                    %878.1
ongorulemez  |            0 |         0 |                  2291.52 |                kazanc yok

Kesintili kapasitenin liste fiyatı 0,28, yani isteğe bağlının yüzde 72 altında. Etkin birim fiyatı ise düz profilde 0,829, tepe yapanda 0,888, öngörülemezde 1,006 — listenin sırasıyla 2,96, 3,17 ve 3,59 katı. Öngörülemez profilde en ucuz görünen model, en pahalı görünenden fiilen pahalıya geliyor. Ayrılmış kapasitede aynı desen daha ılımlı işliyor: liste 0,62 iken etkin fiyat tepe yapan profilde 0,964, öngörülemezde 1,148.

Devredilen karar sütunu bu üçlüyü sıralıyor: isteğe bağlıda 0, ayrılmışta 1, kesintilide 2. Sıra liste indirimiyle birebir örtüşüyor — indirim devredilen kararın karşılığıdır ve üç modelin de etkin fiyatı, devredilen kararın kaç kez aleyhe işlediğine bağlı.

Son tablo çıkışı sayıyor. İsteğe bağlı ve kesintili kapasitede pencerenin ortasında çıkmanın kalan yükümlülüğü sıfırdır. Ayrılmışta düz profilde 2.083,20 birim kalıyor; bu, aynı modelin o profilde kazandırdığı toplam farkın yüzde 81,6’sı demektir. Tepe yapan profilde kalan yükümlülük kazancın yüzde 878,1’i: taahhüdün ortasında çıkmak, taahhüdün bütün kazancını sekiz kez siler. Kiralamanın çıkış bedeli burada bir tahmin değil, sözleşmenin doğrudan yazdığı sayıdır.

Özet

  • Üç kapasite modeli devredilen karar sayısıyla sıralanır: isteğe bağlı 0, ayrılmış 1 (kapasiteyi küçültme), kesintili 2 (işin ne zaman kesileceği); liste indirimi bu sırayı izler.
  • Aynı üç model üç yük profilinde koşturulduğunda üç ayrı model kazanır: düz profilde ayrılmış (ikinciden yüzde 33,7 ucuz), tepe yapanda kesintili (yüzde 8,5), öngörülemezde isteğe bağlı (yüzde 0,6). Tek bir doğru model yoktur.
  • Kesintili kapasitenin gizli kalemi geri alınan iştir: düz profilde 463,7 kb-saat kayıp ve 1.159,20 birim yeniden koşma; tepe yapanda 787,9 kb-saat ve 1.969,80 birim.
  • Ayrılmış kapasitenin gizli kalemi kullanılmayan taahhüttür: tepe yapan profilde 1.911, öngörülemez profilde 3.907 kb-saat ödenip kullanılmıyor.
  • Liste fiyatı ile etkin birim fiyat ayrı sayılardır: kesintili liste 0,28 iken etkin fiyat 0,829 ile 1,006 arasında (listenin 2,96–3,59 katı) ve öngörülemez profilde isteğe bağlıyı geçiyor.
  • Çıkışta isteğe bağlı ve kesintili kapasitenin kalan yükümlülüğü sıfır; ayrılmışta pencerenin ortasında çıkmak düz profilde kazancın yüzde 81,6’sını, tepe yapan profilde yüzde 878,1’ini siler.

Sonraki Adım

Dört ders kiralanan altyapının coğrafyasını ve fiyatını ölçtü: arıza alanı ayrımı, kullanıcıya yakınlık, sütunlar arası gerilim ve kapasitenin hangi koşulla alındığı. Hepsi tek bir şeyi varsaydı — kiralanacak iş zaten kiralanmış durumda. Oysa bölgesel ölçüm ağı bugün kendi salonunda koşuyor ve buraya bir yerden gelmesi gerekiyor. Aynı hizmet olduğu gibi taşınabilir, tek tek parçaları kiralanan karşılıklarıyla değiştirilebilir ya da baştan yazılabilir; üçü de aynı sonucu vermez. Sonraki ders bu üç göç yolunu devredilen karar cinsinden karşılaştırır: her yolda kaç karar sağlayıcıya geçiyor, kaç kalem yeniden yazılıyor, geçiş kaç dalgada tamamlanıyor ve en önemlisi — bu dört derste sayılan çıkış bedeli her yolda ne kadar büyü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