<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://program.sonsuz.us/feed.xml" rel="self" type="application/atom+xml" /><link href="https://program.sonsuz.us/" rel="alternate" type="text/html" /><updated>2026-10-23T18:05:41+00:00</updated><id>https://program.sonsuz.us/feed.xml</id><title type="html">SonsuzUs</title><subtitle>Programlama ve Yazılım</subtitle><author><name>Sonsuz Us</name></author><entry><title type="html">Biyolojik Gürültüden Anlamlı Veriye: EEG, EKG ve EMG Sinyalleri Nasıl Temizlenir?</title><link href="https://program.sonsuz.us/posts/biyolojik-gurultuden-anlamli-veriye-eeg-ekg-ve-emg-sinyalleri-nasil-temizlenir/" rel="alternate" type="text/html" title="Biyolojik Gürültüden Anlamlı Veriye: EEG, EKG ve EMG Sinyalleri Nasıl Temizlenir?" /><published>2026-10-23T00:00:00+00:00</published><updated>2026-10-23T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/biyolojik-gurultuden-anlamli-veriye-eeg-ekg-ve-emg-sinyalleri-nasil-temizlenir</id><content type="html" xml:base="https://program.sonsuz.us/posts/biyolojik-gurultuden-anlamli-veriye-eeg-ekg-ve-emg-sinyalleri-nasil-temizlenir/"><![CDATA[<p>Kalbin elektriksel ritmini, beynin düşünürken oluşturduğu dalgaları veya kasların çalışırken ürettiği gerilimleri bilgisayarda görebiliyoruz. Ne var ki elektrotlardan gelen ham EEG, EKG ve EMG kayıtları çoğu zaman tertemiz değildir; şebeke elektriği, hareket, terleme ve hatta göz kırpma bile ölçüme karışır. Tıbbi sinyal işleme, işte bu gürültülü elektrik çorbasından klinik açıdan anlamlı bilgiyi ayırma sanatıdır.</p>

<p>``</p>

<h2 id="önce-sinyalin-matematiği">Önce sinyalin matematiği</h2>

<p>Bilgisayar, biyolojik sinyali belirli aralıklarla ölçülmüş sayılar dizisi olarak saklar. Sürekli zamanlı $x(t)$ sinyali, örnekleme sonrasında $x[n]$ biçimine dönüşür. Örnekleme frekansı $f_s$ ise iki ölçüm arasındaki süre $T_s = 1/f_s$ olur.</p>

<p>Nyquist ilkesine göre, frekansı $f_{max}$ olan bir bileşeni kaybetmeden yakalayabilmek için $f_s &gt; 2f_{max}$ seçilmelidir. Örneğin 150 Hz’e kadar EMG bileşenleri incelenecekse 300 Hz teorik alt sınırdır; pratikte daha yüksek bir değer kullanılır.</p>

<p>Ham kayıt basitçe şöyle modellenebilir:</p>

\[x[n] = s[n] + g[n] + a[n]\]

<p>Burada $s[n]$ aradığımız biyolojik sinyal, $g[n]$ rastgele gürültü, $a[n]$ ise göz kırpması veya elektrot hareketi gibi artefaktlardır. Amaç her şeyi susturmak değil, $s[n]$ bileşenini bozmadan diğerlerini azaltmaktır.</p>

<h2 id="üç-sinyal-üç-farklı-karakter">Üç sinyal, üç farklı karakter</h2>

<table>
  <thead>
    <tr>
      <th>Sinyal</th>
      <th>Kaynak</th>
      <th style="text-align: right">Yaklaşık anlamlı bant</th>
      <th>Yaygın sorun</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>EEG</td>
      <td>Beyin etkinliği</td>
      <td style="text-align: right">0.5–45 Hz</td>
      <td>Göz kırpması, kas hareketi</td>
    </tr>
    <tr>
      <td>EKG</td>
      <td>Kalbin elektriksel etkinliği</td>
      <td style="text-align: right">0.5–40 Hz</td>
      <td>Baz çizgisi kayması, şebeke gürültüsü</td>
    </tr>
    <tr>
      <td>EMG</td>
      <td>Kas liflerinin etkinliği</td>
      <td style="text-align: right">20–450 Hz</td>
      <td>Hareket artefaktı, elektrot teması</td>
    </tr>
  </tbody>
</table>

<p>Bu farklılık önemlidir: EKG için uygun olan bir filtre, EMG’nin değerli yüksek frekanslarını silebilir. Yani tek bir “sihirli temizleme düğmesi” yoktur.</p>

<h2 id="temizleme-hattı-nasıl-kurulur">Temizleme hattı nasıl kurulur?</h2>

<p>İlk adım çoğunlukla <strong>bant geçiren filtredir</strong>. Yüksek geçiren bölüm yavaş baz çizgisi kaymasını, alçak geçiren bölüm ise gereksiz yüksek frekansları azaltır. Ardından 50 Hz veya 60 Hz elektrik şebekesi parazitine karşı dar bir <strong>notch filtresi</strong> uygulanabilir.</p>

<table>
  <thead>
    <tr>
      <th>Yöntem</th>
      <th>Güçlü yanı</th>
      <th>Dikkat edilmesi gereken</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Bant geçiren filtre</td>
      <td>İstenen frekansları ayırır</td>
      <td>Kesim frekansları bilgi silebilir</td>
    </tr>
    <tr>
      <td>Notch filtre</td>
      <td>Şebeke parazitini bastırır</td>
      <td>Yakındaki biyolojik bileşenleri etkileyebilir</td>
    </tr>
    <tr>
      <td>Medyan filtre</td>
      <td>Ani sıçramalara dayanıklıdır</td>
      <td>Dalga biçimini değiştirebilir</td>
    </tr>
    <tr>
      <td>ICA</td>
      <td>Karışmış kaynakları ayırabilir</td>
      <td>Uzman yorumu ve çok kanallı kayıt ister</td>
    </tr>
    <tr>
      <td>Wavelet</td>
      <td>Zamana göre değişen olaylarda etkilidir</td>
      <td>Eşik ve dalgacık seçimi kritiktir</td>
    </tr>
  </tbody>
</table>

<p>Özellikle EEG’de göz kırpması birden fazla kanala yayılır. Bağımsız Bileşen Analizi, yani ICA, kayıtları istatistiksel olarak bağımsız kaynaklara ayırmaya çalışır. Göz hareketine benzeyen bileşen çıkarılıp kalanlar yeniden birleştirilebilir. Ancak yanlış bileşeni silmek, beynin gerçek etkinliğini de çöpe atabilir.</p>

<h2 id="python-ile-örnek-filtreleme">Python ile örnek filtreleme</h2>

<p>Aşağıdaki örnek, 250 Hz ile kaydedilmiş bir EKG sinyaline 0.5–40 Hz bant geçiren Butterworth filtresi uygular:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">numpy</span> <span class="k">as</span> <span class="n">np</span>
<span class="kn">from</span> <span class="n">scipy.signal</span> <span class="kn">import</span> <span class="n">butter</span><span class="p">,</span> <span class="n">sosfiltfilt</span>

<span class="k">def</span> <span class="nf">ekg_temizle</span><span class="p">(</span><span class="n">sinyal</span><span class="p">,</span> <span class="n">fs</span><span class="o">=</span><span class="mi">250</span><span class="p">):</span>
    <span class="c1"># SOS gösterimi sayısal kararlılığı artırır.
</span>    <span class="n">sos</span> <span class="o">=</span> <span class="nf">butter</span><span class="p">(</span>
        <span class="n">N</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span>
        <span class="n">Wn</span><span class="o">=</span><span class="p">[</span><span class="mf">0.5</span><span class="p">,</span> <span class="mi">40</span><span class="p">],</span>
        <span class="n">btype</span><span class="o">=</span><span class="sh">"</span><span class="s">bandpass</span><span class="sh">"</span><span class="p">,</span>
        <span class="n">fs</span><span class="o">=</span><span class="n">fs</span><span class="p">,</span>
        <span class="n">output</span><span class="o">=</span><span class="sh">"</span><span class="s">sos</span><span class="sh">"</span>
    <span class="p">)</span>

    <span class="c1"># İleri-geri filtreleme faz kaymasını önler.
</span>    <span class="k">return</span> <span class="nf">sosfiltfilt</span><span class="p">(</span><span class="n">sos</span><span class="p">,</span> <span class="n">np</span><span class="p">.</span><span class="nf">asarray</span><span class="p">(</span><span class="n">sinyal</span><span class="p">))</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">sosfiltfilt</code>, filtreyi iki yönde çalıştırarak dalgaların zamanını kaydırmaz. Bu, R tepesinin konumu gibi zamanlamaya bağlı EKG ölçümlerinde değerlidir. Bununla birlikte gerçek zamanlı sistemler gelecekteki örnekleri göremediği için aynı yöntemi doğrudan kullanamaz.</p>

<h2 id="temiz-sinyal-her-zaman-doğru-sinyal-değildir">Temiz sinyal her zaman doğru sinyal değildir</h2>

<p>Filtreleme sonrasında ham ve temizlenmiş kayıt mutlaka birlikte karşılaştırılmalıdır. Güç spektrumu, sinyal-gürültü oranı ve klinik dalga biçimleri kontrol edilmelidir. Örneğin sinyal-gürültü oranı $SNR = 10\log_{10}(P_s/P_g)$ ile ifade edilebilir; yükselmesi olumlu görünse de tanısal bir tepenin silinmediğini garanti etmez.</p>

<p>Sonuç olarak başarılı tıbbi sinyal işleme; matematik, biyoloji ve dikkatli doğrulamanın birleşimidir. Amaç grafiği güzel göstermek değil, hastaya ait gerçek bilgiyi güvenilir biçimde korumaktır.</p>

<p><img src="/img/biyolojik-gurultuden-anlamli-50.svg" alt="biyolojik-gurultuden-anlamli-50" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="sinyal işleme" /><category term="eeg" /><category term="ekg" /><category term="emg" /><category term="python" /><category term="biyomedikal" /><category term="filtreleme" /><summary type="html"><![CDATA[Kalbin elektriksel ritmini, beynin düşünürken oluşturduğu dalgaları veya kasların çalışırken ürettiği gerilimleri bilgisayarda görebiliyoruz. Ne var ki elektrotlardan gelen ham EEG, EKG ve EMG kayıtları çoğu zaman tertemiz değildir; şebeke elektriği, hareket, terleme ve hatta göz kırpma bile ölçüme karışır. Tıbbi sinyal işleme, işte bu gürültülü elektrik çorbasından klinik açıdan anlamlı bilgiyi ayırma sanatıdır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/biyolojik-gurultuden-anlamli-50.png" /><media:content medium="image" url="https://program.sonsuz.us/img/biyolojik-gurultuden-anlamli-50.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Black-Scholes Modeli: Opsiyon Fiyatlamasının Matematiksel ve Algoritmik Temelleri</title><link href="https://program.sonsuz.us/posts/black-scholes-modeli-opsiyon-fiyatlamasinin-matematiksel-ve-algoritmik-temelleri/" rel="alternate" type="text/html" title="Black-Scholes Modeli: Opsiyon Fiyatlamasının Matematiksel ve Algoritmik Temelleri" /><published>2026-10-23T00:00:00+00:00</published><updated>2026-10-23T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/black-scholes-modeli-opsiyon-fiyatlamasinin-matematiksel-ve-algoritmik-temelleri</id><content type="html" xml:base="https://program.sonsuz.us/posts/black-scholes-modeli-opsiyon-fiyatlamasinin-matematiksel-ve-algoritmik-temelleri/"><![CDATA[<p>Bir opsiyonun “adil” fiyatı nasıl belirlenir? Black-Scholes modeli, bu soruyu rastgele fiyat hareketlerini matematiksel bir çerçeveye oturtarak yanıtlar. Model kusursuz bir piyasa kristal küresi değildir; ancak risk, zaman ve belirsizlik arasındaki ilişkiyi anlamak için finansal matematiğin en güçlü başlangıç noktalarından biridir.
``</p>

<h2 id="opsiyon-nedir">Opsiyon nedir?</h2>

<p>Opsiyon, sahibine belirli bir varlığı gelecekte belirli bir kullanım fiyatından alma veya satma hakkı verir. <strong>Call opsiyonu</strong> alma, <strong>put opsiyonu</strong> ise satma hakkıdır. Buradaki kritik kelime “hak”tır: Opsiyon sahibi işlemi gerçekleştirmek zorunda değildir.</p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>Call opsiyonu</th>
      <th>Put opsiyonu</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Sağladığı hak</td>
      <td>Varlığı satın alma</td>
      <td>Varlığı satma</td>
    </tr>
    <tr>
      <td>Değer kazandığı durum</td>
      <td>Fiyat yükseldiğinde</td>
      <td>Fiyat düştüğünde</td>
    </tr>
    <tr>
      <td>Vade sonu getirisi</td>
      <td>$\max(S_T-K,0)$</td>
      <td>$\max(K-S_T,0)$</td>
    </tr>
    <tr>
      <td>Temel beklenti</td>
      <td>Yükseliş</td>
      <td>Düşüş</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/black-scholes-modeli-65.svg" alt="black-scholes-modeli-65" /></p>

<p>Burada $S_T$ vade sonundaki varlık fiyatını, $K$ ise kullanım fiyatını gösterir.</p>

<h2 id="modelin-teorik-zemini">Modelin teorik zemini</h2>

<p>Black-Scholes, varlık fiyatının geometrik Brown hareketi izlediğini varsayar:</p>

\[dS_t = \mu S_t\,dt + \sigma S_t\,dW_t\]

<p>Bu denklemde $\mu$ beklenen getiri oranı, $\sigma$ volatilite ve $dW_t$ rastgele şoku temsil eder. Geometrik yapı sayesinde fiyatın negatif olması engellenir. Model ayrıca işlem maliyeti bulunmadığını, risksiz faiz oranının sabit olduğunu, varlığın sürekli alınıp satılabildiğini ve piyasanın arbitraja izin vermediğini kabul eder.</p>

<p>Asıl matematiksel sihir, opsiyon ile temel varlıktan oluşturulan <strong>delta-nötr portföyde</strong> gerçekleşir. Portföy çok kısa bir süre için fiyat hareketlerine karşı dengelenirse rastgelelik ortadan kaldırılabilir. Risksiz hale gelen portföy, arbitraj olmaması nedeniyle risksiz faiz oranıyla büyümelidir. Bu fikir şu kısmi diferansiyel denklemi doğurur:</p>

\[\frac{\partial V}{\partial t}+\frac{1}{2}\sigma^2S^2\frac{\partial^2V}{\partial S^2}+rS\frac{\partial V}{\partial S}-rV=0\]

<p>Avrupa tipi, temettüsüz bir call opsiyonunun kapalı form çözümü şöyledir:</p>

\[C=S_0N(d_1)-Ke^{-rT}N(d_2)\]

\[d_1=\frac{\ln(S_0/K)+(r+\sigma^2/2)T}{\sigma\sqrt{T}}, \qquad d_2=d_1-\sigma\sqrt{T}\]

<p>$N(x)$ standart normal dağılımın kümülatif dağılım fonksiyonudur. $S_0$ bugünkü fiyatı, $T$ vadeye kalan süreyi ve $r$ sürekli bileşik risksiz faiz oranını belirtir.</p>

<h2 id="algoritmik-uygulama">Algoritmik uygulama</h2>

<p>Formülü Python ile doğrudan hesaplayabiliriz:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">math</span> <span class="kn">import</span> <span class="n">log</span><span class="p">,</span> <span class="n">sqrt</span><span class="p">,</span> <span class="n">exp</span><span class="p">,</span> <span class="n">erf</span>

<span class="k">def</span> <span class="nf">normal_cdf</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
    <span class="c1"># Standart normal dağılımın kümülatif olasılığını hesaplar.
</span>    <span class="k">return</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="p">(</span><span class="mf">1.0</span> <span class="o">+</span> <span class="nf">erf</span><span class="p">(</span><span class="n">x</span> <span class="o">/</span> <span class="nf">sqrt</span><span class="p">(</span><span class="mf">2.0</span><span class="p">)))</span>

<span class="k">def</span> <span class="nf">black_scholes_call</span><span class="p">(</span><span class="n">S</span><span class="p">,</span> <span class="n">K</span><span class="p">,</span> <span class="n">T</span><span class="p">,</span> <span class="n">r</span><span class="p">,</span> <span class="n">sigma</span><span class="p">):</span>
    <span class="k">if</span> <span class="n">T</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
        <span class="k">return</span> <span class="nf">max</span><span class="p">(</span><span class="n">S</span> <span class="o">-</span> <span class="n">K</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span>
    <span class="k">if</span> <span class="n">sigma</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
        <span class="k">return</span> <span class="nf">max</span><span class="p">(</span><span class="n">S</span> <span class="o">-</span> <span class="n">K</span> <span class="o">*</span> <span class="nf">exp</span><span class="p">(</span><span class="o">-</span><span class="n">r</span> <span class="o">*</span> <span class="n">T</span><span class="p">),</span> <span class="mf">0.0</span><span class="p">)</span>

    <span class="n">d1</span> <span class="o">=</span> <span class="p">(</span><span class="nf">log</span><span class="p">(</span><span class="n">S</span> <span class="o">/</span> <span class="n">K</span><span class="p">)</span> <span class="o">+</span> <span class="p">(</span><span class="n">r</span> <span class="o">+</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="n">sigma</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span> <span class="o">*</span> <span class="n">T</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">sigma</span> <span class="o">*</span> <span class="nf">sqrt</span><span class="p">(</span><span class="n">T</span><span class="p">))</span>
    <span class="n">d2</span> <span class="o">=</span> <span class="n">d1</span> <span class="o">-</span> <span class="n">sigma</span> <span class="o">*</span> <span class="nf">sqrt</span><span class="p">(</span><span class="n">T</span><span class="p">)</span>
    <span class="k">return</span> <span class="n">S</span> <span class="o">*</span> <span class="nf">normal_cdf</span><span class="p">(</span><span class="n">d1</span><span class="p">)</span> <span class="o">-</span> <span class="n">K</span> <span class="o">*</span> <span class="nf">exp</span><span class="p">(</span><span class="o">-</span><span class="n">r</span> <span class="o">*</span> <span class="n">T</span><span class="p">)</span> <span class="o">*</span> <span class="nf">normal_cdf</span><span class="p">(</span><span class="n">d2</span><span class="p">)</span>

<span class="n">fiyat</span> <span class="o">=</span> <span class="nf">black_scholes_call</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="mi">105</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mf">0.04</span><span class="p">,</span> <span class="mf">0.25</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Call fiyatı: </span><span class="si">{</span><span class="n">fiyat</span><span class="si">:</span><span class="p">.</span><span class="mi">2</span><span class="n">f</span><span class="si">}</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<p>Fonksiyon önce vade ve volatilite gibi sınır durumlarını denetler; ardından $d_1$ ve $d_2$ değerlerini hesaplayarak teorik call fiyatını üretir. Gerçek uygulamalarda temettü, piyasa spread’i ve veri kalitesi de hesaba katılmalıdır.</p>

<h2 id="parametreler-fiyatı-nasıl-etkiler">Parametreler fiyatı nasıl etkiler?</h2>

<table>
  <thead>
    <tr>
      <th>Değişim</th>
      <th style="text-align: right">Call üzerindeki genel etki</th>
      <th>Gerekçe</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>$S_0$ artar</td>
      <td style="text-align: right">Artar</td>
      <td>Satın alma hakkı değerlenir</td>
    </tr>
    <tr>
      <td>$K$ artar</td>
      <td style="text-align: right">Azalır</td>
      <td>Kullanım pahalılaşır</td>
    </tr>
    <tr>
      <td>$\sigma$ artar</td>
      <td style="text-align: right">Artar</td>
      <td>Büyük kazanç olasılığı yükselir</td>
    </tr>
    <tr>
      <td>$T$ artar</td>
      <td style="text-align: right">Genellikle artar</td>
      <td>Olumlu hareket için süre çoğalır</td>
    </tr>
    <tr>
      <td>$r$ artar</td>
      <td style="text-align: right">Genellikle artar</td>
      <td>Kullanım fiyatının bugünkü değeri düşer</td>
    </tr>
  </tbody>
</table>

<p>Modelin en tartışmalı girdisi volatilitedir. Piyasa fiyatından tersine hesaplanan <strong>örtük volatilite</strong>, yatırımcıların gelecekteki belirsizlik beklentisini yansıtır. Gerçekte volatilite sabit değildir; ayrıca fiyatlarda sıçramalar ve kalın kuyruklar görülebilir. Bu yüzden Black-Scholes nihai gerçek değil, güçlü bir referans modelidir: Mantığı öğrenildiğinde binom ağaçları, Monte Carlo simülasyonu ve stokastik volatilite modelleri çok daha anlaşılır hale gelir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="black-scholes" /><category term="opsiyon" /><category term="finansal matematik" /><category term="python" /><category term="algoritma" /><category term="türev ürünler" /><summary type="html"><![CDATA[Bir opsiyonun “adil” fiyatı nasıl belirlenir? Black-Scholes modeli, bu soruyu rastgele fiyat hareketlerini matematiksel bir çerçeveye oturtarak yanıtlar. Model kusursuz bir piyasa kristal küresi değildir; ancak risk, zaman ve belirsizlik arasındaki ilişkiyi anlamak için finansal matematiğin en güçlü başlangıç noktalarından biridir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/black-scholes-modeli-65.png" /><media:content medium="image" url="https://program.sonsuz.us/img/black-scholes-modeli-65.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">C++ Nesne Dilimlenmesi: Kopyalama Sırasında Kaybolan Kimlik</title><link href="https://program.sonsuz.us/posts/c-nesne-dilimlenmesi-kopyalama-sirasinda-kaybolan-kimlik/" rel="alternate" type="text/html" title="C++ Nesne Dilimlenmesi: Kopyalama Sırasında Kaybolan Kimlik" /><published>2026-10-23T00:00:00+00:00</published><updated>2026-10-23T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/c-nesne-dilimlenmesi-kopyalama-sirasinda-kaybolan-kimlik</id><content type="html" xml:base="https://program.sonsuz.us/posts/c-nesne-dilimlenmesi-kopyalama-sirasinda-kaybolan-kimlik/"><![CDATA[<p>C++’ta kalıtım kullanırken türetilmiş bir nesneyi temel sınıf türündeki değişkene değer olarak atamak ilk bakışta zararsız görünebilir. Kod derlenir, program çalışır ve çoğu zaman hata mesajı da alınmaz. Fakat bu işlem sırasında nesnenin yalnızca temel sınıfa ait bölümü kopyalanır; türetilmiş sınıfın eklediği veriler ve davranış kimliği kaybolur. İşte bu sessiz bilgi kaybına <strong>nesne dilimlenmesi</strong>, yani <em>object slicing</em> denir.</p>

<p>``</p>

<h2 id="nesne-neden-dilimlenir">Nesne neden “dilimlenir”?</h2>

<p>Bir türetilmiş sınıf nesnesini kavramsal olarak iki parçalı düşünebiliriz:</p>

\[Türetilmiş\ Nesne = Temel\ Bölüm + Türetilmiş\ Bölüm\]

<p>Temel sınıf türünde değer saklayan bir değişkenin kapasitesi ise yalnızca temel bölüme uygundur. Dolayısıyla aşağıdaki atamada <code class="language-plaintext highlighter-rouge">Calisan</code> nesnesinin <code class="language-plaintext highlighter-rouge">Yazilimci</code> sınıfına özgü kısmı hedef nesneye sığmaz. C++ bu kısmı hata vermeden dışarıda bırakır.</p>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;iostream&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;string&gt;</span><span class="cp">
</span>
<span class="k">class</span> <span class="nc">Calisan</span> <span class="p">{</span>
<span class="nl">public:</span>
    <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">ad</span><span class="p">;</span>

    <span class="k">virtual</span> <span class="kt">void</span> <span class="n">tanit</span><span class="p">()</span> <span class="k">const</span> <span class="p">{</span>
        <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">ad</span> <span class="o">&lt;&lt;</span> <span class="s">": Calisan</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
    <span class="p">}</span>
<span class="p">};</span>

<span class="k">class</span> <span class="nc">Yazilimci</span> <span class="o">:</span> <span class="k">public</span> <span class="n">Calisan</span> <span class="p">{</span>
<span class="nl">public:</span>
    <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">dil</span><span class="p">;</span>

    <span class="kt">void</span> <span class="n">tanit</span><span class="p">()</span> <span class="k">const</span> <span class="k">override</span> <span class="p">{</span>
        <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="n">ad</span> <span class="o">&lt;&lt;</span> <span class="s">": "</span> <span class="o">&lt;&lt;</span> <span class="n">dil</span> <span class="o">&lt;&lt;</span> <span class="s">" gelistiricisi</span><span class="se">\n</span><span class="s">"</span><span class="p">;</span>
    <span class="p">}</span>
<span class="p">};</span>

<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
    <span class="n">Yazilimci</span> <span class="n">y</span><span class="p">;</span>
    <span class="n">y</span><span class="p">.</span><span class="n">ad</span> <span class="o">=</span> <span class="s">"Ada"</span><span class="p">;</span>
    <span class="n">y</span><span class="p">.</span><span class="n">dil</span> <span class="o">=</span> <span class="s">"C++"</span><span class="p">;</span>

    <span class="n">Calisan</span> <span class="n">c</span> <span class="o">=</span> <span class="n">y</span><span class="p">;</span> <span class="c1">// Nesne dilimlenir</span>
    <span class="n">c</span><span class="p">.</span><span class="n">tanit</span><span class="p">();</span>     <span class="c1">// Ada: Calisan</span>
<span class="p">}</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">tanit()</code> sanal olmasına rağmen sonuç değişmez. Çünkü <code class="language-plaintext highlighter-rouge">c</code>, artık bağımsız ve gerçek bir <code class="language-plaintext highlighter-rouge">Calisan</code> nesnesidir. İçinde <code class="language-plaintext highlighter-rouge">Yazilimci</code> kimliği bulunmadığından sanal fonksiyon mekanizmasının çağırabileceği türetilmiş davranış da kalmamıştır. <code class="language-plaintext highlighter-rouge">virtual</code>, dilimlenmeyi önlemez; yalnızca nesneye referans veya işaretçi üzerinden erişildiğinde dinamik türü kullanır.</p>

<table>
  <thead>
    <tr>
      <th>Aktarım biçimi</th>
      <th style="text-align: right">Kopyalama var mı?</th>
      <th style="text-align: right">Türetilmiş bilgi korunur mu?</th>
      <th style="text-align: right">Polimorfizm çalışır mı?</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">Calisan c = y</code></td>
      <td style="text-align: right">Evet</td>
      <td style="text-align: right">Hayır</td>
      <td style="text-align: right">Hayır</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">Calisan&amp; c = y</code></td>
      <td style="text-align: right">Hayır</td>
      <td style="text-align: right">Evet</td>
      <td style="text-align: right">Evet</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">Calisan* c = &amp;y</code></td>
      <td style="text-align: right">Hayır</td>
      <td style="text-align: right">Evet</td>
      <td style="text-align: right">Evet</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">unique_ptr&lt;Calisan&gt;</code></td>
      <td style="text-align: right">Nesnenin kendisi kopyalanmaz</td>
      <td style="text-align: right">Evet</td>
      <td style="text-align: right">Evet</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/c-nesne-dilimlenmesi-46.svg" alt="c-nesne-dilimlenmesi-46" /></p>

<h2 id="fonksiyon-parametrelerindeki-gizli-tuzak">Fonksiyon parametrelerindeki gizli tuzak</h2>

<p>Dilimlenme yalnızca açık atamalarda oluşmaz. Temel sınıfı değer olarak kabul eden fonksiyonlar da aynı soruna yol açar:</p>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kt">void</span> <span class="nf">bilgiYaz</span><span class="p">(</span><span class="n">Calisan</span> <span class="n">calisan</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// Değer ile alınıyor</span>
    <span class="n">calisan</span><span class="p">.</span><span class="n">tanit</span><span class="p">();</span>
<span class="p">}</span>

<span class="n">Yazilimci</span> <span class="n">y</span><span class="p">;</span>
<span class="n">bilgiYaz</span><span class="p">(</span><span class="n">y</span><span class="p">);</span> <span class="c1">// Parametre oluşturulurken dilimlenir</span>
</code></pre></div></div>

<p>Çözüm, parametreyi çoğunlukla sabit referansla almaktır:</p>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kt">void</span> <span class="nf">bilgiYaz</span><span class="p">(</span><span class="k">const</span> <span class="n">Calisan</span><span class="o">&amp;</span> <span class="n">calisan</span><span class="p">)</span> <span class="p">{</span>
    <span class="n">calisan</span><span class="p">.</span><span class="n">tanit</span><span class="p">();</span> <span class="c1">// Gerçek türe göre çağrı yapılır</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Bu yöntem hem türetilmiş kimliği korur hem de gereksiz nesne kopyasını engeller. Fonksiyon nesneyi değiştirmeyecekse <code class="language-plaintext highlighter-rouge">const</code> kullanılması niyeti açıkça belirtir.</p>

<h2 id="koleksiyonlarda-doğru-tür-seçimi">Koleksiyonlarda doğru tür seçimi</h2>

<p><code class="language-plaintext highlighter-rouge">std::vector&lt;Calisan&gt;</code> içine <code class="language-plaintext highlighter-rouge">Yazilimci</code> eklemek de nesneyi dilimler. Farklı türetilmiş türleri aynı koleksiyonda polimorfik olarak saklamak için akıllı işaretçiler kullanılabilir:</p>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;memory&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;vector&gt;</span><span class="cp">
</span>
<span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="n">std</span><span class="o">::</span><span class="n">unique_ptr</span><span class="o">&lt;</span><span class="n">Calisan</span><span class="o">&gt;&gt;</span> <span class="n">ekip</span><span class="p">;</span>
<span class="n">ekip</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">make_unique</span><span class="o">&lt;</span><span class="n">Yazilimci</span><span class="o">&gt;</span><span class="p">());</span>

<span class="k">for</span> <span class="p">(</span><span class="k">const</span> <span class="k">auto</span><span class="o">&amp;</span> <span class="n">kisi</span> <span class="o">:</span> <span class="n">ekip</span><span class="p">)</span> <span class="p">{</span>
    <span class="n">kisi</span><span class="o">-&gt;</span><span class="n">tanit</span><span class="p">();</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Burada vektör nesnelerin kendilerini değil, temel sınıf türündeki sahiplik işaretçilerini saklar. Gerçek nesneler türetilmiş türleriyle yaşamaya devam eder. Temel sınıf üzerinden silme yapılacağı için yıkıcının da sanal olması gerekir:</p>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">virtual</span> <span class="o">~</span><span class="n">Calisan</span><span class="p">()</span> <span class="o">=</span> <span class="k">default</span><span class="p">;</span>
</code></pre></div></div>

<p>Özetle, değer semantiği bilinçli bir temel sınıf kopyası istendiğinde uygundur; polimorfik davranış istendiğinde ise referanslar, işaretçiler ve akıllı işaretçiler tercih edilmelidir. Derleyicinin sessiz kalması işlemin zararsız olduğu anlamına gelmez: Nesnenin yalnızca üst dilimini servis edip geri kalanını mutfakta unutmuş olabilirsiniz.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="c++" /><category term="nesne yönelimli programlama" /><category term="object slicing" /><category term="kalıtım" /><category term="polimorfizm" /><category term="referanslar" /><summary type="html"><![CDATA[C++’ta kalıtım kullanırken türetilmiş bir nesneyi temel sınıf türündeki değişkene değer olarak atamak ilk bakışta zararsız görünebilir. Kod derlenir, program çalışır ve çoğu zaman hata mesajı da alınmaz. Fakat bu işlem sırasında nesnenin yalnızca temel sınıfa ait bölümü kopyalanır; türetilmiş sınıfın eklediği veriler ve davranış kimliği kaybolur. İşte bu sessiz bilgi kaybına nesne dilimlenmesi, yani object slicing denir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/c-nesne-dilimlenmesi-46.png" /><media:content medium="image" url="https://program.sonsuz.us/img/c-nesne-dilimlenmesi-46.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">C++’ta Manuel Kaynak Yönetimi: Exception Gelince Sızıntı Başlar</title><link href="https://program.sonsuz.us/posts/cta-manuel-kaynak-yonetimi-exception-gelince-sizinti-baslar/" rel="alternate" type="text/html" title="C++’ta Manuel Kaynak Yönetimi: Exception Gelince Sızıntı Başlar" /><published>2026-10-23T00:00:00+00:00</published><updated>2026-10-23T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/cta-manuel-kaynak-yonetimi-exception-gelince-sizinti-baslar</id><content type="html" xml:base="https://program.sonsuz.us/posts/cta-manuel-kaynak-yonetimi-exception-gelince-sizinti-baslar/"><![CDATA[<p>C++ geliştirirken <code class="language-plaintext highlighter-rouge">new</code> ile bellek ayırıp işimiz bitince <code class="language-plaintext highlighter-rouge">delete</code> çağırmak ilk bakışta oldukça düzenli görünür. Fakat kodun ortasında bir istisna fırlatıldığında kontrol akışı planladığımız yolu izlemez. Temizlik satırına ulaşılamaz ve ayrılan kaynak sahipsiz kalır. Program çalışmaya devam etse bile bellekte küçük bir hayalet dolaşmaya başlar.</p>

<p>``</p>

<h2 id="sorun-yalnızca-delete-unutmak-değildir">Sorun yalnızca <code class="language-plaintext highlighter-rouge">delete</code> unutmak değildir</h2>

<p>Manuel kaynak yönetiminde genellikle kaynağın yaşam süresini zihnimizde takip ederiz: kaynağı edin, kullan ve serbest bırak. İdeal akış şöyle düşünülebilir:</p>

\[T_{yaşam} = T_{serbest\ bırakma} - T_{edinme}\]

<p>Ancak bir exception oluştuğunda fonksiyon normal dönüş noktasına ulaşmaz. C++ çalışma zamanı stack unwinding işlemini başlatır; yani çağrı yığınındaki yerel nesneler geriye doğru yok edilir. Ham işaretçinin kendisi yok olur fakat işaret ettiği dinamik nesne otomatik olarak silinmez.</p>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;stdexcept&gt;</span><span class="cp">
</span>
<span class="kt">void</span> <span class="nf">veriyiIsle</span><span class="p">()</span> <span class="p">{</span>
    <span class="kt">int</span><span class="o">*</span> <span class="n">sayilar</span> <span class="o">=</span> <span class="k">new</span> <span class="kt">int</span><span class="p">[</span><span class="mi">1000</span><span class="p">];</span>

    <span class="n">sayilar</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">42</span><span class="p">;</span>
    <span class="k">throw</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span><span class="p">(</span><span class="s">"Dosya okunamadı"</span><span class="p">);</span>

    <span class="k">delete</span><span class="p">[]</span> <span class="n">sayilar</span><span class="p">;</span> <span class="c1">// Bu satıra hiçbir zaman ulaşılamaz.</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Buradaki sızıntının matematiksel özeti basittir:</p>

\[Ayrılan\ Kaynaklar - Serbest\ Bırakılan\ Kaynaklar &gt; 0\]

<p>Fonksiyon her çağrıldığında yeni bir blok ayrılır. Hata tekrarlanırsa kayıp miktarı birikir. Tek çağrıdaki sızıntı $M$ bayt ve hatalı çağrı sayısı $n$ ise toplam kayıp yaklaşık $n \times M$ olur.</p>

<h2 id="try-catch-ile-temizlik-yeterli-mi"><code class="language-plaintext highlighter-rouge">try-catch</code> ile temizlik yeterli mi?</h2>

<p>Kaynağı <code class="language-plaintext highlighter-rouge">catch</code> bloğunda temizlemek mümkündür, fakat çözüm hızla kırılganlaşır:</p>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kt">void</span> <span class="nf">veriyiIsle</span><span class="p">()</span> <span class="p">{</span>
    <span class="kt">int</span><span class="o">*</span> <span class="n">sayilar</span> <span class="o">=</span> <span class="k">new</span> <span class="kt">int</span><span class="p">[</span><span class="mi">1000</span><span class="p">];</span>

    <span class="k">try</span> <span class="p">{</span>
        <span class="n">riskliIslem</span><span class="p">(</span><span class="n">sayilar</span><span class="p">);</span>
    <span class="p">}</span> <span class="k">catch</span> <span class="p">(...)</span> <span class="p">{</span>
        <span class="k">delete</span><span class="p">[]</span> <span class="n">sayilar</span><span class="p">;</span>
        <span class="k">throw</span><span class="p">;</span> <span class="c1">// Orijinal exception yeniden gönderilir.</span>
    <span class="p">}</span>

    <span class="k">delete</span><span class="p">[]</span> <span class="n">sayilar</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Bu kod sızıntıyı önleyebilir; ancak hem normal hem de hatalı yol için aynı temizlik işlemi yazılmıştır. Fonksiyona dosya tanıtıcısı, kilit veya ikinci bir bellek bloğu eklendiğinde olası çıkış yolları çoğalır. Ayrıca yanlış sırada temizlik yapmak ya da bir kaynağı iki kez serbest bırakmak mümkündür.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th style="text-align: right">Exception güvenliği</th>
      <th style="text-align: right">Bakım maliyeti</th>
      <th>Risk</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Ham işaretçi ve manuel <code class="language-plaintext highlighter-rouge">delete</code></td>
      <td style="text-align: right">Düşük</td>
      <td style="text-align: right">Yüksek</td>
      <td>Sızıntı, çift silme</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">try-catch</code> ile manuel temizlik</td>
      <td style="text-align: right">Orta</td>
      <td style="text-align: right">Yüksek</td>
      <td>Tekrarlı ve kırılgan kod</td>
    </tr>
    <tr>
      <td>RAII nesnesi</td>
      <td style="text-align: right">Yüksek</td>
      <td style="text-align: right">Düşük</td>
      <td>Sahiplik daha nettir</td>
    </tr>
    <tr>
      <td>Akıllı işaretçi</td>
      <td style="text-align: right">Yüksek</td>
      <td style="text-align: right">Düşük</td>
      <td>Yanlış işaretçi türü seçimi</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/cta-manuel-kaynak-67.svg" alt="cta-manuel-kaynak-67" /></p>

<h2 id="güvenli-çözüm-raii">Güvenli çözüm: RAII</h2>

<p>RAII, kaynağın yaşam süresini bir nesnenin yaşam süresine bağlar. Kullanıcı manuel olarak yıkıcı çağırmaz; kapsam sona erdiğinde yıkıcı dil tarafından otomatik çağrılır. Exception oluşması da bu davranışı bozmaz.</p>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;memory&gt;</span><span class="cp">
#include</span> <span class="cpf">&lt;stdexcept&gt;</span><span class="cp">
</span>
<span class="kt">void</span> <span class="nf">veriyiIsle</span><span class="p">()</span> <span class="p">{</span>
    <span class="k">auto</span> <span class="n">sayilar</span> <span class="o">=</span> <span class="n">std</span><span class="o">::</span><span class="n">make_unique</span><span class="o">&lt;</span><span class="kt">int</span><span class="p">[]</span><span class="o">&gt;</span><span class="p">(</span><span class="mi">1000</span><span class="p">);</span>
    <span class="n">sayilar</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">42</span><span class="p">;</span>

    <span class="k">throw</span> <span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span><span class="p">(</span><span class="s">"İşlem başarısız"</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">std::unique_ptr</code>, dizinin tek sahibidir. Stack unwinding sırasında <code class="language-plaintext highlighter-rouge">sayilar</code> nesnesinin yıkıcısı çalışır ve dinamik dizi serbest bırakılır. Açık bir <code class="language-plaintext highlighter-rouge">delete[]</code> satırına ihtiyaç kalmaz.</p>

<p>Çoğu durumda dinamik dizi için daha doğal seçenek <code class="language-plaintext highlighter-rouge">std::vector</code> kullanmaktır:</p>

<div class="language-cpp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">#include</span> <span class="cpf">&lt;vector&gt;</span><span class="cp">
</span>
<span class="kt">void</span> <span class="nf">veriyiIsle</span><span class="p">()</span> <span class="p">{</span>
    <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span> <span class="n">sayilar</span><span class="p">(</span><span class="mi">1000</span><span class="p">);</span>
    <span class="n">sayilar</span><span class="p">.</span><span class="n">at</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="o">=</span> <span class="mi">42</span><span class="p">;</span>
    <span class="n">riskliIslem</span><span class="p">(</span><span class="n">sayilar</span><span class="p">.</span><span class="n">data</span><span class="p">());</span>
<span class="p">}</span>
</code></pre></div></div>

<p>RAII yalnızca bellek için değildir. Dosyalar, mutex kilitleri, soketler ve veritabanı bağlantıları da aynı ilkeyle kapsüllenebilir. Temel kural şudur: Kaynağı edinen nesne, onu bırakmaktan da sorumlu olmalıdır. Böylece exception geldiğinde temizlik bir dilek değil, kapsam mekanizmasının garantisi olur.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="c++" /><category term="raii" /><category term="exception" /><category term="bellek yönetimi" /><category term="akıllı işaretçiler" /><summary type="html"><![CDATA[C++ geliştirirken new ile bellek ayırıp işimiz bitince delete çağırmak ilk bakışta oldukça düzenli görünür. Fakat kodun ortasında bir istisna fırlatıldığında kontrol akışı planladığımız yolu izlemez. Temizlik satırına ulaşılamaz ve ayrılan kaynak sahipsiz kalır. Program çalışmaya devam etse bile bellekte küçük bir hayalet dolaşmaya başlar.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/cta-manuel-kaynak-67.png" /><media:content medium="image" url="https://program.sonsuz.us/img/cta-manuel-kaynak-67.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Dijital İkizler: Hastanın Sanal Kopyasıyla Tedaviyi Önceden Denemek</title><link href="https://program.sonsuz.us/posts/dijital-ikizler-hastanin-sanal-kopyasiyla-tedaviyi-onceden-denemek/" rel="alternate" type="text/html" title="Dijital İkizler: Hastanın Sanal Kopyasıyla Tedaviyi Önceden Denemek" /><published>2026-10-23T00:00:00+00:00</published><updated>2026-10-23T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/dijital-ikizler-hastanin-sanal-kopyasiyla-tedaviyi-onceden-denemek</id><content type="html" xml:base="https://program.sonsuz.us/posts/dijital-ikizler-hastanin-sanal-kopyasiyla-tedaviyi-onceden-denemek/"><![CDATA[<p>Bir ilacı hastaya vermeden önce etkilerini onun bilgisayardaki sanal kopyası üzerinde deneyebilseydik nasıl olurdu? Dijital ikiz yaklaşımı tam olarak bu fikrin peşinden gidiyor. Sensörlerden, tıbbi görüntülerden, laboratuvar sonuçlarından ve klinik kayıtlardan beslenen dinamik bir model; hastanın olası tepkilerini simüle ederek doktorlara karar desteği sunuyor.
``</p>

<h2 id="dijital-ikiz-nedir">Dijital ikiz nedir?</h2>

<p>Dijital ikiz, gerçek bir varlığın verilerle sürekli güncellenen hesaplamalı temsilidir. Endüstride bir uçak motorunun aşınmasını tahmin etmek için kullanılan bu yaklaşım, sağlık alanında kalp, tümör, organ sistemi veya bütün bir hasta için uygulanabilir.</p>

<p>Buradaki kritik kelime <strong>dinamik</strong>tir. Klasik bir üç boyutlu anatomi modeli yalnızca görünümü temsil ederken dijital ikiz, zaman içindeki değişimleri de hesaplamaya çalışır. Hastanın tansiyonu yükseldiğinde, yeni bir MR görüntüsü çekildiğinde veya ilaç dozu değiştirildiğinde sanal model de güncellenir.</p>

<table>
  <thead>
    <tr>
      <th>Model türü</th>
      <th style="text-align: right">Veriyle güncellenir mi?</th>
      <th style="text-align: right">Geleceği simüle eder mi?</th>
      <th style="text-align: right">Kişiye özel mi?</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>3B anatomi modeli</td>
      <td style="text-align: right">Genellikle hayır</td>
      <td style="text-align: right">Hayır</td>
      <td style="text-align: right">Kısmen</td>
    </tr>
    <tr>
      <td>İstatistiksel hasta profili</td>
      <td style="text-align: right">Bazen</td>
      <td style="text-align: right">Sınırlı</td>
      <td style="text-align: right">Evet</td>
    </tr>
    <tr>
      <td>Dijital ikiz</td>
      <td style="text-align: right">Sürekli veya periyodik</td>
      <td style="text-align: right">Evet</td>
      <td style="text-align: right">Evet</td>
    </tr>
  </tbody>
</table>

<h2 id="sanal-hasta-nasıl-oluşturulur">Sanal hasta nasıl oluşturulur?</h2>

<p>İlk adım veri toplamaktır. Genetik bilgiler, kan değerleri, görüntüleme sonuçları, kullanılan ilaçlar ve giyilebilir cihaz ölçümleri ortak bir hasta modeli içinde birleştirilir. Ardından biyolojik süreçleri açıklayan matematiksel denklemler ile veriden örüntü öğrenen yapay zekâ modelleri birlikte kullanılabilir.</p>

<p>Örneğin kandaki bir ilacın miktarı basitleştirilmiş biçimde şöyle modellenebilir:</p>

\[C(t) = C_0 e^{-kt}\]

<p>Burada $C(t)$, ilacın $t$ anındaki konsantrasyonu; $C_0$ başlangıç konsantrasyonu, $k$ ise ilacın vücuttan atılma hızıdır. Hastanın böbrek fonksiyonu değiştiğinde $k$ değeri de kişiye özel biçimde ayarlanabilir. Böylece standart bir denklem, hastanın verileriyle kişiselleştirilmiş bir simülasyona dönüşür.</p>

<p>Aşağıdaki basit Python örneği, farklı dozların zaman içindeki tahmini konsantrasyonunu hesaplar:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">math</span>

<span class="k">def</span> <span class="nf">konsantrasyon</span><span class="p">(</span><span class="n">baslangic_dozu</span><span class="p">,</span> <span class="n">atilim_hizi</span><span class="p">,</span> <span class="n">saat</span><span class="p">):</span>
    <span class="k">return</span> <span class="n">baslangic_dozu</span> <span class="o">*</span> <span class="n">math</span><span class="p">.</span><span class="nf">exp</span><span class="p">(</span><span class="o">-</span><span class="n">atilim_hizi</span> <span class="o">*</span> <span class="n">saat</span><span class="p">)</span>

<span class="k">for</span> <span class="n">doz</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">50</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">150</span><span class="p">]:</span>
    <span class="n">sonuc</span> <span class="o">=</span> <span class="nf">konsantrasyon</span><span class="p">(</span><span class="n">doz</span><span class="p">,</span> <span class="mf">0.12</span><span class="p">,</span> <span class="mi">8</span><span class="p">)</span>
    <span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">'</span><span class="si">{</span><span class="n">doz</span><span class="si">}</span><span class="s"> mg doz: </span><span class="si">{</span><span class="n">sonuc</span><span class="si">:</span><span class="p">.</span><span class="mi">2</span><span class="n">f</span><span class="si">}</span><span class="s"> birim</span><span class="sh">'</span><span class="p">)</span>
</code></pre></div></div>

<p>Bu kod klinik kullanım için yeterli değildir; yalnızca doz, zaman ve atılım hızı arasındaki ilişkiyi gösterir. Gerçek modeller yaş, kilo, ilaç etkileşimleri ve organ fonksiyonları gibi çok sayıda değişken içerir.</p>

<h2 id="tedavi-simülasyonu-nasıl-işler">Tedavi simülasyonu nasıl işler?</h2>

<p>Doktor, sanal ikiz üzerinde farklı senaryolar çalıştırabilir: İlaç dozu artırılırsa ne olur? Radyoterapi tümöre hangi açıdan uygulanmalı? Ameliyat ertelenirse risk nasıl değişir? Sistem her seçenek için beklenen yararı ve yan etki olasılığını hesaplar.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Güçlü yanı</th>
      <th>Temel riski</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Standart tedavi protokolü</td>
      <td>Kanıta dayalı ve uygulanması kolay</td>
      <td>Bireysel farklılıkları kaçırabilir</td>
    </tr>
    <tr>
      <td>Yapay zekâ tahmini</td>
      <td>Karmaşık örüntüleri bulabilir</td>
      <td>Açıklanması zor olabilir</td>
    </tr>
    <tr>
      <td>Dijital ikiz simülasyonu</td>
      <td>Senaryoları kişiye özel karşılaştırır</td>
      <td>Hatalı veriden etkilenir</td>
    </tr>
  </tbody>
</table>

<p>Bir tedavinin toplam puanı basitçe $S = w_1B - w_2R$ biçiminde düşünülebilir. Burada $B$ beklenen faydayı, $R$ riski, $w_1$ ve $w_2$ ise klinik öncelikleri temsil eder. Ancak gerçek hayatta kararlar tek bir sayıya indirgenmez; hastanın tercihleri de sürecin parçasıdır.</p>

<h2 id="fırsatlar-sınırlar-ve-etik-meseleler">Fırsatlar, sınırlar ve etik meseleler</h2>

<p>Dijital ikizler gereksiz deneme-yanılmayı azaltabilir, nadir hastalıkların seyrini incelemeyi kolaylaştırabilir ve kişiselleştirilmiş tedaviyi güçlendirebilir. Buna karşın model, beslendiği veri kadar güvenilirdir. Eksik ölçümler, toplumdaki belirli grupları temsil etmeyen veri kümeleri veya yanlış biyolojik varsayımlar tehlikeli sonuçlar üretebilir.</p>

<p>Ayrıca tıbbi veriler son derece hassastır. Açık rıza, şifreleme, erişim kontrolü, model denetimi ve kararların açıklanabilir olması zorunludur. Dijital ikiz doktorun yerini alan dijital bir kahin değil, doktor ile hastanın seçenekleri daha bilinçli değerlendirmesine yardım eden gelişmiş bir simülasyon aracıdır. Geleceğin muayenehanesinde stetoskopun yanında bir sanal hasta görmek şaşırtıcı olmayabilir.</p>

<p><img src="/img/dijital-ikizler-hastanin-37.svg" alt="dijital-ikizler-hastanin-37" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="dijital ikiz" /><category term="sağlık teknolojileri" /><category term="yapay zeka" /><category term="simülasyon" /><category term="kişiselleştirilmiş tıp" /><category term="veri bilimi" /><summary type="html"><![CDATA[Bir ilacı hastaya vermeden önce etkilerini onun bilgisayardaki sanal kopyası üzerinde deneyebilseydik nasıl olurdu? Dijital ikiz yaklaşımı tam olarak bu fikrin peşinden gidiyor. Sensörlerden, tıbbi görüntülerden, laboratuvar sonuçlarından ve klinik kayıtlardan beslenen dinamik bir model; hastanın olası tepkilerini simüle ederek doktorlara karar desteği sunuyor.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/dijital-ikizler-hastanin-37.png" /><media:content medium="image" url="https://program.sonsuz.us/img/dijital-ikizler-hastanin-37.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Finansal Dolandırıcılık Tespiti: Makine Öğrenmesi Şüpheli İşlemleri Nasıl Yakalar?</title><link href="https://program.sonsuz.us/posts/finansal-dolandiricilik-tespiti-makine-ogrenmesi-supheli-islemleri-nasil-yakalar/" rel="alternate" type="text/html" title="Finansal Dolandırıcılık Tespiti: Makine Öğrenmesi Şüpheli İşlemleri Nasıl Yakalar?" /><published>2026-10-23T00:00:00+00:00</published><updated>2026-10-23T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/finansal-dolandiricilik-tespiti-makine-ogrenmesi-supheli-islemleri-nasil-yakalar</id><content type="html" xml:base="https://program.sonsuz.us/posts/finansal-dolandiricilik-tespiti-makine-ogrenmesi-supheli-islemleri-nasil-yakalar/"><![CDATA[<p>Kredi kartınızla gece yarısı başka bir ülkede yüksek tutarlı alışveriş yapıldığını düşünün. Bankanın saniyeler içinde işlemi durdurup size bildirim göndermesi sihir değil; geçmiş işlemlerden davranış kalıpları öğrenen makine öğrenmesi sistemlerinin eseridir. Ancak bu sistemlerin görevi yalnızca “garip” işlemleri bulmak değil, gerçek müşterileri gereksiz yere rahatsız etmeden dolandırıcılığı mümkün olduğunca erken yakalamaktır.</p>

<p><img src="/img/finansal-dolandiricilik-tespiti-12.svg" alt="finansal-dolandiricilik-tespiti-12" /></p>

<p>``</p>

<h2 id="problem-neden-zordur">Problem neden zordur?</h2>

<p>Finansal dolandırıcılık tespiti, klasik bir <strong>ikili sınıflandırma</strong> problemine benzer. Her işlem için model iki olasılıktan birini tahmin eder:</p>

<ul>
  <li>$y=0$: Normal işlem</li>
  <li>$y=1$: Dolandırıcılık</li>
</ul>

<p>Model; tutar, saat, konum, cihaz, iş yeri kategorisi ve müşterinin geçmiş davranışları gibi özellikleri kullanarak $P(y=1\vert x)$ olasılığını hesaplar. Bu olasılık belirlenen eşikten yüksekse işlem incelemeye gönderilir veya geçici olarak durdurulur.</p>

<p>Asıl sorun, veri kümesinin son derece dengesiz olmasıdır. Bir milyon işlem içinde yalnızca bin dolandırıcılık bulunabilir. Her işleme “normal” diyen tembel bir model, %99,9 doğruluk elde eder; fakat tek bir suçluyu bile yakalayamaz. Yani yüksek <strong>accuracy</strong>, burada tek başına etkileyici görünen ama pek işe yaramayan bir vitrindir.</p>

<table>
  <thead>
    <tr>
      <th>Metrik</th>
      <th>Cevapladığı soru</th>
      <th>Finansal anlamı</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Precision</td>
      <td>Alarm verilen işlemlerin kaçı gerçekten şüpheli?</td>
      <td>Gereksiz müşteri engellemelerini azaltır</td>
    </tr>
    <tr>
      <td>Recall</td>
      <td>Dolandırıcılıkların kaçı yakalandı?</td>
      <td>Finansal kaybı azaltır</td>
    </tr>
    <tr>
      <td>F1 skoru</td>
      <td>Precision ve recall dengeli mi?</td>
      <td>Genel karşılaştırma sağlar</td>
    </tr>
    <tr>
      <td>ROC-AUC</td>
      <td>Model sınıfları ne kadar iyi ayırıyor?</td>
      <td>Eşik bağımsız değerlendirme sunar</td>
    </tr>
  </tbody>
</table>

<p>Precision ve recall arasındaki denge şu formülle özetlenebilir:</p>

\[F1 = 2 \times \frac{Precision \times Recall}{Precision + Recall}\]

<h2 id="model-neye-bakar">Model neye bakar?</h2>

<p>Ham işlem verileri çoğu zaman yeterli değildir. Etkili sistemler, davranışı temsil eden yeni özellikler üretir. Örneğin müşterinin son bir saatte yaptığı işlem sayısı, mevcut tutarın ortalama harcamaya oranı veya ardışık işlemler arasındaki coğrafi mesafe hesaplanabilir.</p>

<table>
  <thead>
    <tr>
      <th>Normal davranış</th>
      <th>Şüpheli davranış</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Düzenli saatlerde alışveriş</td>
      <td>Alışılmadık saatte yüksek harcama</td>
    </tr>
    <tr>
      <td>Sık kullanılan cihaz</td>
      <td>İlk kez görülen cihaz</td>
    </tr>
    <tr>
      <td>Yakın şehirlerde işlemler</td>
      <td>Dakikalar içinde farklı ülkeler</td>
    </tr>
    <tr>
      <td>Ortalama tutara yakın ödeme</td>
      <td>Ortalamanın çok üzerinde ödeme</td>
    </tr>
  </tbody>
</table>

<p>Örneğin İstanbul’da yapılan bir işlemin beş dakika ardından Tokyo’da fiziksel kart kullanılması, “imkânsız seyahat” sinyalidir. Yine de tek bir sinyal kesin suç kanıtı değildir. Müşteri VPN kullanıyor, seyahat ediyor veya alışılmadık ama tamamen meşru bir alışveriş yapıyor olabilir.</p>

<h2 id="hangi-algoritmalar-kullanılır">Hangi algoritmalar kullanılır?</h2>

<p>Lojistik regresyon açıklanabilir ve hızlı bir başlangıç modelidir. Karar ağaçları, Random Forest ve özellikle XGBoost gibi yöntemler karmaşık ilişkileri daha iyi yakalayabilir. Etiketlenmiş dolandırıcılık örneklerinin az olduğu durumlarda Isolation Forest veya Autoencoder gibi <strong>anomali tespiti</strong> yöntemleri devreye girer.</p>

<p>Aşağıdaki örnek, dengesiz sınıflara ağırlık vererek basit bir model eğitir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">sklearn.ensemble</span> <span class="kn">import</span> <span class="n">RandomForestClassifier</span>
<span class="kn">from</span> <span class="n">sklearn.metrics</span> <span class="kn">import</span> <span class="n">classification_report</span>

<span class="c1"># Az görülen dolandırıcılık sınıfına otomatik olarak daha fazla önem verir.
</span><span class="n">model</span> <span class="o">=</span> <span class="nc">RandomForestClassifier</span><span class="p">(</span>
    <span class="n">n_estimators</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span>
    <span class="n">class_weight</span><span class="o">=</span><span class="sh">'</span><span class="s">balanced</span><span class="sh">'</span><span class="p">,</span>
    <span class="n">random_state</span><span class="o">=</span><span class="mi">42</span>
<span class="p">)</span>

<span class="n">model</span><span class="p">.</span><span class="nf">fit</span><span class="p">(</span><span class="n">X_train</span><span class="p">,</span> <span class="n">y_train</span><span class="p">)</span>
<span class="n">predictions</span> <span class="o">=</span> <span class="n">model</span><span class="p">.</span><span class="nf">predict</span><span class="p">(</span><span class="n">X_test</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="nf">classification_report</span><span class="p">(</span><span class="n">y_test</span><span class="p">,</span> <span class="n">predictions</span><span class="p">))</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">class_weight='balanced'</code>, azınlık sınıfındaki hataların model açısından daha maliyetli olmasını sağlar. Alternatif olarak SMOTE ile sentetik örnek üretilebilir; ancak zaman sıralı finans verilerinde veri sızıntısını önlemek için eğitim ve test ayrımı kronolojik yapılmalıdır.</p>

<h2 id="gerçek-sistemlerde-karar-nasıl-verilir">Gerçek sistemlerde karar nasıl verilir?</h2>

<p>Üretim ortamında model genellikle tek başına karar vermez. Model skoru, kural motoru ve risk politikaları birlikte çalışır. Düşük riskli işlem onaylanabilir, orta riskli işlem için ek doğrulama istenebilir, yüksek riskli işlem ise engellenip uzman incelemesine gönderilebilir.</p>

<p>Dolandırıcıların davranışları sürekli değiştiği için model de düzenli olarak izlenmeli ve yeniden eğitilmelidir. Buna <strong>concept drift</strong> denir. Başarılı bir sistem yalnızca geçmiş suçları ezberlemez; yeni saldırı biçimlerine uyum sağlar, yanlış alarmları kontrol eder ve kararlarının nedenini açıklayabilir. Kısacası makine öğrenmesi dijital bir dedektiftir; fakat iyi veri, doğru metrikler ve insan denetimi olmadan büyüteci ters tutabilir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="makine öğrenmesi" /><category term="finans" /><category term="dolandırıcılık tespiti" /><category term="veri bilimi" /><category term="anomali tespiti" /><category term="python" /><summary type="html"><![CDATA[Kredi kartınızla gece yarısı başka bir ülkede yüksek tutarlı alışveriş yapıldığını düşünün. Bankanın saniyeler içinde işlemi durdurup size bildirim göndermesi sihir değil; geçmiş işlemlerden davranış kalıpları öğrenen makine öğrenmesi sistemlerinin eseridir. Ancak bu sistemlerin görevi yalnızca “garip” işlemleri bulmak değil, gerçek müşterileri gereksiz yere rahatsız etmeden dolandırıcılığı mümkün olduğunca erken yakalamaktır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/finansal-dolandiricilik-tespiti-12.png" /><media:content medium="image" url="https://program.sonsuz.us/img/finansal-dolandiricilik-tespiti-12.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">İlaç Keşfinde Yapay Zekâ: Molekülleri Bilgisayarda Avlamak</title><link href="https://program.sonsuz.us/posts/ilac-kesfinde-yapay-zeka-molekulleri-bilgisayarda-avlamak/" rel="alternate" type="text/html" title="İlaç Keşfinde Yapay Zekâ: Molekülleri Bilgisayarda Avlamak" /><published>2026-10-23T00:00:00+00:00</published><updated>2026-10-23T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/ilac-kesfinde-yapay-zeka-molekulleri-bilgisayarda-avlamak</id><content type="html" xml:base="https://program.sonsuz.us/posts/ilac-kesfinde-yapay-zeka-molekulleri-bilgisayarda-avlamak/"><![CDATA[<p><img src="/img/ilac-kesfinde-yapay-29.svg" alt="ilac-kesfinde-yapay-29" /></p>

<p>Yeni bir ilaç geliştirmek, milyarlarca olası molekül arasından doğru anahtarı bulmaya benzer. Geleneksel yaklaşımda araştırmacılar çok sayıda bileşiği sentezleyip laboratuvarda test eder. Yapay zekâ ise henüz deney tüpüne dokunmadan hangi moleküllerin umut vadettiğini tahmin ederek arama alanını küçültür. Böylece laboratuvar ortadan kalkmaz; yalnızca daha seçici, hızlı ve ekonomik kullanılır.
``</p>

<h2 id="bilgisayar-bir-molekülü-nasıl-görür">Bilgisayar bir molekülü nasıl görür?</h2>

<p>Bir kimyager moleküle atomlar, bağlar ve fonksiyonel gruplar üzerinden bakar. Bilgisayarın çalışabilmesi için bunların sayısal bir temsile dönüştürülmesi gerekir. En yaygın gösterimlerden biri, moleküler yapıyı metin biçiminde ifade eden <strong>SMILES</strong> dizileridir. Örneğin etanol <code class="language-plaintext highlighter-rouge">CCO</code> olarak yazılabilir.</p>

<p>Moleküller ayrıca birer grafik olarak modellenebilir: atomlar düğüm, kimyasal bağlar ise kenardır. Grafik sinir ağları, komşu atomlardan bilgi toplayarak molekülün çözünürlük, toksisite veya hedef proteine bağlanma eğilimi gibi özelliklerini öğrenebilir.</p>

<p>Bir modelin temel amacı yaklaşık olarak şu fonksiyonu öğrenmektir:</p>

\[f(\text{molekül}) \rightarrow \text{aktivite, toksisite, çözünürlük, bağlanma gücü}\]

<p>Tahmin edilen değer ile deneysel sonuç arasındaki fark, örneğin ortalama karesel hata kullanılarak ölçülebilir:</p>

\[MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2\]

<p>Model, bu hatayı azaltacak şekilde eğitilir. Ancak düşük hata her zaman yeni kimyasal yapılarda başarılı olunacağı anlamına gelmez; eğitim verisinin çeşitliliği kritik önemdedir.</p>

<h2 id="sanal-tarama-nasıl-ilerler">Sanal tarama nasıl ilerler?</h2>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Temel fikir</th>
      <th>Güçlü yanı</th>
      <th>Sınırlaması</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>QSAR</td>
      <td>Yapısal özelliklerden biyolojik aktivite tahmini</td>
      <td>Çok sayıda molekülü hızlı tarar</td>
      <td>Kaliteli etiketli veri ister</td>
    </tr>
    <tr>
      <td>Moleküler kenetlenme</td>
      <td>Molekülü proteinin bağlanma cebine yerleştirir</td>
      <td>Üç boyutlu etkileşimleri inceler</td>
      <td>Skorlama fonksiyonları yaklaşık sonuç verir</td>
    </tr>
    <tr>
      <td>Grafik sinir ağı</td>
      <td>Atom ve bağ ilişkilerini öğrenir</td>
      <td>Özellikleri otomatik çıkarabilir</td>
      <td>Yüksek veri ve hesaplama ihtiyacı doğurabilir</td>
    </tr>
    <tr>
      <td>Üretici model</td>
      <td>Yeni molekül tasarımları önerir</td>
      <td>Bilinen katalogla sınırlı değildir</td>
      <td>Sentezlenmesi imkânsız yapılar üretebilir</td>
    </tr>
  </tbody>
</table>

<p>Tipik süreçte önce hastalıkla ilişkili bir protein hedefi seçilir. Ardından milyonlarca molekül, hızlı tahmin modelleriyle elenir. Kalan adaylar kenetlenme ve moleküler dinamik yöntemleriyle incelenir. Son aşamada aktivite kadar <strong>ADMET</strong> özellikleri de değerlendirilir: emilim, dağılım, metabolizma, atılım ve toksisite.</p>

<h2 id="python-ile-küçük-bir-moleküler-ön-eleme">Python ile küçük bir moleküler ön eleme</h2>

<p>Aşağıdaki örnek, RDKit kullanarak moleküllerin molekül ağırlığını ve yağ-severliğini belirten LogP değerini hesaplar. Belirlenen sınırları aşan adaylar elenir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">rdkit</span> <span class="kn">import</span> <span class="n">Chem</span>
<span class="kn">from</span> <span class="n">rdkit.Chem</span> <span class="kn">import</span> <span class="n">Descriptors</span>

<span class="n">adaylar</span> <span class="o">=</span> <span class="p">[</span><span class="sh">'</span><span class="s">CCO</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">CC(=O)OC1=CC=CC=C1C(=O)O</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">CCCCCCCCCCCC</span><span class="sh">'</span><span class="p">]</span>

<span class="k">for</span> <span class="n">smiles</span> <span class="ow">in</span> <span class="n">adaylar</span><span class="p">:</span>
    <span class="n">molekul</span> <span class="o">=</span> <span class="n">Chem</span><span class="p">.</span><span class="nc">MolFromSmiles</span><span class="p">(</span><span class="n">smiles</span><span class="p">)</span>
    <span class="k">if</span> <span class="n">molekul</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
        <span class="k">continue</span>

    <span class="n">agirlik</span> <span class="o">=</span> <span class="n">Descriptors</span><span class="p">.</span><span class="nc">MolWt</span><span class="p">(</span><span class="n">molekul</span><span class="p">)</span>
    <span class="n">logp</span> <span class="o">=</span> <span class="n">Descriptors</span><span class="p">.</span><span class="nc">MolLogP</span><span class="p">(</span><span class="n">molekul</span><span class="p">)</span>
    <span class="n">uygun</span> <span class="o">=</span> <span class="n">agirlik</span> <span class="o">&lt;</span> <span class="mi">500</span> <span class="ow">and</span> <span class="n">logp</span> <span class="o">&lt;</span> <span class="mi">5</span>

    <span class="nf">print</span><span class="p">(</span><span class="n">smiles</span><span class="p">,</span> <span class="nf">round</span><span class="p">(</span><span class="n">agirlik</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="nf">round</span><span class="p">(</span><span class="n">logp</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="n">uygun</span><span class="p">)</span>
</code></pre></div></div>

<p>Bu kod ilaç keşfetmez; yalnızca basit bir filtre uygular. Gerçek projelerde parmak izi vektörleri, deneysel aktivite verileri ve makine öğrenmesi modelleri birlikte kullanılır. Ayrıca aynı proteine güçlü bağlanan iki molekülden biri zehirli, kararsız veya vücutta hızla parçalanan bir aday olabilir.</p>

<h2 id="yapay-zekânın-freni-belirsizlik">Yapay zekânın freni: belirsizlik</h2>

<p>Modelin yalnızca tahmin vermesi yetmez; tahminine ne kadar güvendiğini de belirtmesi gerekir. Eğitim kümesine hiç benzemeyen bir molekül için yüksek güven bildiren sistem tehlikelidir. Bu nedenle ansambl modelleri, olasılıksal yöntemler ve uygulanabilirlik alanı kontrolleri kullanılır.</p>

<p>Sonuç olarak yapay zekâ, kimyagerin yerine geçen sihirli bir laboratuvar değildir. Daha çok dev bir kimyasal kütüphanede fener tutan hızlı bir araştırma asistanıdır. En umut verici adayları öne çıkarır, başarısız deneyleri azaltır ve hipotez üretir. Fakat güvenlik ve etkinlik iddialarının doğrulanması için sentez, hücre deneyleri, hayvan çalışmaları ve klinik araştırmalar hâlâ vazgeçilmezdir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="yapay zekâ" /><category term="ilaç keşfi" /><category term="biyoinformatik" /><category term="makine öğrenmesi" /><category term="moleküler modelleme" /><category term="python" /><summary type="html"><![CDATA[Yeni bir ilaç geliştirmek, milyarlarca olası molekül arasından doğru anahtarı bulmaya benzer. Geleneksel yaklaşımda araştırmacılar çok sayıda bileşiği sentezleyip laboratuvarda test eder. Yapay zekâ ise henüz deney tüpüne dokunmadan hangi moleküllerin umut vadettiğini tahmin ederek arama alanını küçültür. Böylece laboratuvar ortadan kalkmaz; yalnızca daha seçici, hızlı ve ekonomik kullanılır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/ilac-kesfinde-yapay-29.png" /><media:content medium="image" url="https://program.sonsuz.us/img/ilac-kesfinde-yapay-29.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Kamera-Robot Kalibrasyon Hataları El-Göz Koordinasyonunu Nasıl Bozar?</title><link href="https://program.sonsuz.us/posts/kamera-robot-kalibrasyon-hatalari-el-goz-koordinasyonunu-nasil-bozar/" rel="alternate" type="text/html" title="Kamera-Robot Kalibrasyon Hataları El-Göz Koordinasyonunu Nasıl Bozar?" /><published>2026-10-23T00:00:00+00:00</published><updated>2026-10-23T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/kamera-robot-kalibrasyon-hatalari-el-goz-koordinasyonunu-nasil-bozar</id><content type="html" xml:base="https://program.sonsuz.us/posts/kamera-robot-kalibrasyon-hatalari-el-goz-koordinasyonunu-nasil-bozar/"><![CDATA[<p>Bir robotun kamerayla gördüğü parçayı doğru noktadan yakalaması, iki farklı dünyanın aynı koordinat dilini konuşmasına bağlıdır. Kamera-robot kalibrasyonundaki birkaç milimetrelik kayma veya küçük bir açı hatası, robot kolunun hedefi ıskalamasına, parçaya eğri yaklaşmasına, hatta pahalı bir çarpışmaya yol açabilir. Kısacası kamera doğru görse ve robot kusursuz hareket etse bile aralarındaki tercüman hatalıysa el-göz koordinasyonu bozulur.
``</p>

<h2 id="el-göz-kalibrasyonu-neyi-çözer">El-göz kalibrasyonu neyi çözer?</h2>

<p>El-göz kalibrasyonunun amacı kamera koordinat sistemi ile robotun uç efektörü veya tabanı arasındaki dönüşümü bulmaktır. Kamera robotun bileğine takılıysa <strong>eye-in-hand</strong>, çalışma alanını dışarıdan izliyorsa <strong>eye-to-hand</strong> düzeni kullanılır.</p>

<p>Bir rijit dönüşüm, dönme matrisi $R$ ve öteleme vektörü $t$ ile ifade edilir:</p>

\[T = \begin{bmatrix} R &amp; t \\ 0 &amp; 1 \end{bmatrix}\]

<p>Klasik hand-eye problemi çoğunlukla şu denklem üzerinden çözülür:</p>

\[A_i X = X B_i\]

<p>Burada $A_i$ robotun iki poz arasındaki hareketini, $B_i$ kameranın aynı pozlar arasındaki hareketini, $X$ ise aranan kamera-robot dönüşümünü temsil eder. Ölçümler gürültülü olduğundan eşitlik pratikte tam sağlanmaz; algoritma en uygun $X$ dönüşümünü tahmin eder.</p>

<table>
  <thead>
    <tr>
      <th>Hata türü</th>
      <th>Görülen belirti</th>
      <th>Muhtemel kaynak</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Öteleme hatası</td>
      <td>Tüm hedeflerde benzer yönlü kaçırma</td>
      <td>Yanlış TCP veya ölçüm</td>
    </tr>
    <tr>
      <td>Dönme hatası</td>
      <td>Uzak hedeflerde büyüyen sapma</td>
      <td>Yetersiz poz çeşitliliği</td>
    </tr>
    <tr>
      <td>Kamera iç kalibrasyon hatası</td>
      <td>Görüntü kenarlarında bozulma</td>
      <td>Lens distorsiyonu</td>
    </tr>
    <tr>
      <td>Zamanlama hatası</td>
      <td>Hareket sırasında değişken sonuç</td>
      <td>Kamera-robot senkronizasyonu</td>
    </tr>
  </tbody>
</table>

<h2 id="küçük-açı-büyük-sorun">Küçük açı, büyük sorun</h2>

<p>Dönüş hataları özellikle sinsidir. Yaklaşık $theta$ radyanlık açısal hata, kameradan $d$ uzaklıktaki bir hedefte şu büyüklükte konum sapması oluşturabilir:</p>

\[e_p \approx d \cdot theta\]

<p>Örneğin $theta = 0.5° \approx 0.0087$ radyan ve $d = 1$ metre ise sapma yaklaşık $8.7$ milimetredir. Hassas montaj yapan bir robot için bu değer oldukça büyüktür. Üstelik TCP yanlış tanımlanmışsa hata, robot bileğini döndürdükçe yön değiştiren dairesel bir davranış gösterebilir.</p>

<p>Aşağıdaki Python kodu, küçük açı yaklaşımıyla uzaklığa bağlı yanal hatayı hesaplar:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">math</span>

<span class="k">def</span> <span class="nf">lateral_error</span><span class="p">(</span><span class="n">distance_m</span><span class="p">,</span> <span class="n">angle_deg</span><span class="p">):</span>
    <span class="c1"># Dereceyi radyana çevirip yaklaşık yanal sapmayı bulur.
</span>    <span class="n">angle_rad</span> <span class="o">=</span> <span class="n">math</span><span class="p">.</span><span class="nf">radians</span><span class="p">(</span><span class="n">angle_deg</span><span class="p">)</span>
    <span class="k">return</span> <span class="n">distance_m</span> <span class="o">*</span> <span class="n">angle_rad</span>

<span class="k">for</span> <span class="n">distance</span> <span class="ow">in</span> <span class="p">[</span><span class="mf">0.25</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">]:</span>
    <span class="n">error_m</span> <span class="o">=</span> <span class="nf">lateral_error</span><span class="p">(</span><span class="n">distance</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">)</span>
    <span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="si">{</span><span class="n">distance</span><span class="si">:</span><span class="p">.</span><span class="mi">2</span><span class="n">f</span><span class="si">}</span><span class="s"> m -&gt; </span><span class="si">{</span><span class="n">error_m</span> <span class="o">*</span> <span class="mi">1000</span><span class="si">:</span><span class="p">.</span><span class="mi">2</span><span class="n">f</span><span class="si">}</span><span class="s"> mm</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<p>Bu basit hesap, kalibrasyon raporunda küçük görünen açısal artıkların neden çalışma alanının uzak bölgelerinde ciddi sonuçlar doğurduğunu gösterir.</p>

<h2 id="kalibrasyon-neden-kötü-çıkar">Kalibrasyon neden kötü çıkar?</h2>

<p>En yaygın nedenlerden biri, örnek pozların birbirine fazla benzemesidir. Robot yalnızca doğrusal hareket ettirilirse sistem bazı dönüş bileşenlerini yeterince gözlemleyemez. Farklı eksenlerde dönüşler, çeşitli mesafeler ve çalışma hacmini kapsayan pozlar kullanılmalıdır. Bulanık görüntü, hatalı kalibrasyon deseni ölçüsü, gevşek kamera bağlantısı ve otomatik odak değişimi de sonucu bozar.</p>

<p>Yalnızca düşük yeniden izdüşüm hatasına güvenmek de tehlikelidir. Kamera iç kalibrasyonu başarılı görünürken kamera-robot dönüşümü yanlış olabilir. Bu nedenle doğrulama, eğitimde kullanılmamış pozlarla yapılmalıdır.</p>

<h2 id="sağlam-doğrulama-stratejisi">Sağlam doğrulama stratejisi</h2>

<p>Robotu bilinen kontrol noktalarına yönlendirin ve konum hatasını her eksen için ölçün. Ardından farklı bilek açılarını, yakın-uzak hedefleri ve görüntü merkezinden kenarlara doğru noktaları test edin. Hata mesafeyle büyüyorsa dönme; yaklaşık sabit kalıyorsa öteleme problemi düşünülmelidir.</p>

<p>Son olarak medyan hata kadar maksimum hatayı da raporlayın. Ortalama değer güzel görünürken tek bir uç poz üretim hattını durdurabilir. İyi el-göz koordinasyonu, yalnızca bir kalibrasyon matrisi hesaplamak değil; mekanik sağlamlık, zaman senkronizasyonu, çeşitli örnekleme ve bağımsız doğrulamayı birlikte yönetmektir.</p>

<p><img src="/img/kamera-robot-kalibrasyon-39.svg" alt="kamera-robot-kalibrasyon-39" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="robotik" /><category term="kalibrasyon" /><category term="bilgisayarlı görü" /><category term="el-göz koordinasyonu" /><category term="python" /><category term="otomasyon" /><summary type="html"><![CDATA[Bir robotun kamerayla gördüğü parçayı doğru noktadan yakalaması, iki farklı dünyanın aynı koordinat dilini konuşmasına bağlıdır. Kamera-robot kalibrasyonundaki birkaç milimetrelik kayma veya küçük bir açı hatası, robot kolunun hedefi ıskalamasına, parçaya eğri yaklaşmasına, hatta pahalı bir çarpışmaya yol açabilir. Kısacası kamera doğru görse ve robot kusursuz hareket etse bile aralarındaki tercüman hatalıysa el-göz koordinasyonu bozulur.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/kamera-robot-kalibrasyon-39.png" /><media:content medium="image" url="https://program.sonsuz.us/img/kamera-robot-kalibrasyon-39.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">MMORPG Sunucu Mimarisi: Binlerce Oyuncu Tek Dünyada Nasıl Buluşuyor?</title><link href="https://program.sonsuz.us/posts/mmorpg-sunucu-mimarisi-binlerce-oyuncu-tek-dunyada-nasil-bulusuyor/" rel="alternate" type="text/html" title="MMORPG Sunucu Mimarisi: Binlerce Oyuncu Tek Dünyada Nasıl Buluşuyor?" /><published>2026-10-23T00:00:00+00:00</published><updated>2026-10-23T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/mmorpg-sunucu-mimarisi-binlerce-oyuncu-tek-dunyada-nasil-bulusuyor</id><content type="html" xml:base="https://program.sonsuz.us/posts/mmorpg-sunucu-mimarisi-binlerce-oyuncu-tek-dunyada-nasil-bulusuyor/"><![CDATA[<p>Bir MMORPG dünyasına bağlanıp kalabalık bir şehre girdiğinizde yüzlerce oyuncuyu koşarken, ticaret yaparken ve devasa yaratıklarla savaşırken görebilirsiniz. Ekrandaki bu canlılığın arkasında ise tek bir süper bilgisayar değil; görevleri paylaşan, birbirleriyle sürekli haberleşen ve arızalara karşı hazırlıklı çalışan dağıtık sunucular bulunur.</p>

<p><img src="/img/mmorpg-sunucu-mimarisi-78.svg" alt="mmorpg-sunucu-mimarisi-78" /></p>

<p>``</p>
<h2 id="tek-sunucu-neden-yetmez">Tek Sunucu Neden Yetmez?</h2>

<p>Her oyuncu hareket, yetenek kullanımı, envanter yönetimi ve sohbet gibi olaylar üretir. Oyuncu başına saniyede ortalama $r$ mesaj, eşzamanlı oyuncu sayısı da $N$ ise sistemin karşılaması gereken yaklaşık mesaj yükü şöyledir:</p>

\[M = N \times r\]

<p>Örneğin 10.000 oyuncunun saniyede 15 mesaj ürettiği bir dünyada sunucular saniyede yaklaşık 150.000 mesajı işlemelidir. Üstelik bazı hareketler çevredeki diğer oyunculara da gönderilir. Her veriyi herkese yayınlamak maliyeti hızla $O(N^2)$ seviyesine taşıyabileceğinden MMORPG mimarileri dünyayı mantıksal parçalara ayırır.</p>

<h2 id="sunucu-katmanları">Sunucu Katmanları</h2>

<p>Oyuncu genellikle doğrudan oyun dünyasının merkezine bağlanmaz. İstek, uzmanlaşmış servislerden oluşan bir yolculuk yapar.</p>

<table>
  <thead>
    <tr>
      <th>Bileşen</th>
      <th>Temel görev</th>
      <th>Örnek veri</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Gateway</td>
      <td>Bağlantıyı kabul eder ve yönlendirir</td>
      <td>Oturum, paket, IP</td>
    </tr>
    <tr>
      <td>Kimlik servisi</td>
      <td>Hesabı doğrular</td>
      <td>Token, karakter listesi</td>
    </tr>
    <tr>
      <td>World server</td>
      <td>Dünya kurallarını yönetir</td>
      <td>Saat, hava, global etkinlik</td>
    </tr>
    <tr>
      <td>Zone server</td>
      <td>Belirli bir bölgeyi simüle eder</td>
      <td>Oyuncu, NPC, savaş</td>
    </tr>
    <tr>
      <td>Veritabanı</td>
      <td>Kalıcı veriyi saklar</td>
      <td>Envanter, görev, ekonomi</td>
    </tr>
    <tr>
      <td>Chat servisi</td>
      <td>Mesajlaşmayı yönetir</td>
      <td>Kanal ve özel mesaj</td>
    </tr>
  </tbody>
</table>

<p>Bu ayrım sayesinde sohbet sistemindeki yoğunluk savaş hesaplamalarını durdurmaz. Ayrıca her servis bağımsız biçimde ölçeklenebilir.</p>

<h2 id="shard-zone-ve-instance-farkı">Shard, Zone ve Instance Farkı</h2>

<p><strong>Shard</strong>, aynı oyunun ayrı bir kopyasıdır; oyuncular bunu genellikle “sunucu seçimi” olarak görür. <strong>Zone</strong>, tek dünyanın coğrafi bölümlere ayrılmasıdır. <strong>Instance</strong> ise zindan gibi belirli bir grup için geçici oluşturulan özel alandır.</p>

<table>
  <thead>
    <tr>
      <th>Yöntem</th>
      <th>Avantaj</th>
      <th>Dezavantaj</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Shard</td>
      <td>Güçlü izolasyon</td>
      <td>Oyuncu topluluğunu böler</td>
    </tr>
    <tr>
      <td>Zone</td>
      <td>Kesintisiz dünya hissi</td>
      <td>Sınır geçişleri karmaşıktır</td>
    </tr>
    <tr>
      <td>Instance</td>
      <td>Talebe göre kolay ölçeklenir</td>
      <td>Ortak dünya hissini azaltabilir</td>
    </tr>
  </tbody>
</table>

<p>Bir karakter bölge sınırını geçtiğinde eski zone sunucusu karakter durumunu yeni sunucuya aktarır. Bu <strong>handoff</strong> işlemi sırasında iki sunucunun kısa süreli koordinasyon kurması gerekir; aksi hâlde karakter kopyalanabilir veya kaybolabilir.</p>

<h2 id="interest-management-herkesi-herkese-gösterme">Interest Management: Herkesi Herkese Gösterme</h2>

<p>Bir oyuncunun kıtanın diğer ucundaki hareketleri bilmesine gerek yoktur. Sunucu, dünyayı hücrelere böler ve yalnızca görüş alanındaki nesneleri gönderir. Görüş yarıçapı $d$ olan bir oyuncu için ilgi alanı kabaca $A = \pi d^2$ olur.</p>

<p>Basitleştirilmiş bir yayın mantığı şöyle yazılabilir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">broadcast_movement</span><span class="p">(</span><span class="n">player</span><span class="p">,</span> <span class="n">spatial_grid</span><span class="p">):</span>
    <span class="n">nearby</span> <span class="o">=</span> <span class="n">spatial_grid</span><span class="p">.</span><span class="nf">query</span><span class="p">(</span><span class="n">player</span><span class="p">.</span><span class="n">position</span><span class="p">,</span> <span class="n">radius</span><span class="o">=</span><span class="mi">80</span><span class="p">)</span>

    <span class="k">for</span> <span class="n">entity</span> <span class="ow">in</span> <span class="n">nearby</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">entity</span><span class="p">.</span><span class="nb">id</span> <span class="o">!=</span> <span class="n">player</span><span class="p">.</span><span class="nb">id</span><span class="p">:</span>
            <span class="n">entity</span><span class="p">.</span><span class="n">connection</span><span class="p">.</span><span class="nf">send</span><span class="p">({</span>
                <span class="sh">"</span><span class="s">type</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">movement</span><span class="sh">"</span><span class="p">,</span>
                <span class="sh">"</span><span class="s">player_id</span><span class="sh">"</span><span class="p">:</span> <span class="n">player</span><span class="p">.</span><span class="nb">id</span><span class="p">,</span>
                <span class="sh">"</span><span class="s">position</span><span class="sh">"</span><span class="p">:</span> <span class="n">player</span><span class="p">.</span><span class="n">position</span>
            <span class="p">})</span>
</code></pre></div></div>

<p>Bu kod, hareket paketini yalnızca yakındaki varlıklara göndererek bant genişliği ve işlemci tüketimini azaltır. Gerçek sistemlerde grid, quadtree veya spatial hashing kullanılabilir.</p>

<h2 id="sunucu-otoritesi-ve-tutarlılık">Sunucu Otoritesi ve Tutarlılık</h2>

<p>İstemciye tamamen güvenilirse oyuncu “Ben ışınlandım ve boss’u tek vuruşta yendim” diyebilir. Bu nedenle çoğu MMORPG <strong>server-authoritative</strong> çalışır: İstemci niyeti bildirir, sonucu sunucu hesaplar. İstemci gecikmeyi gizlemek için tahmin yapabilir; ancak son söz sunucudadır.</p>

<p>Tüm veriler aynı tutarlılık seviyesine ihtiyaç duymaz. Hasar ve eşya transferi güçlü tutarlılık isterken oyuncunun birkaç santimetrelik konumu eventual consistency ile yönetilebilir. Kritik ekonomi işlemlerinde idempotency anahtarları ve veritabanı transaction’ları, aynı satın alma paketinin iki kez işlenmesini önler.</p>

<h2 id="gecikme-tick-ve-dayanıklılık">Gecikme, Tick ve Dayanıklılık</h2>

<p>Zone sunucuları dünyayı belirli aralıklarla günceller. Tick hızı $f$ ise bir tick süresi yaklaşık $T = 1/f$ saniyedir. 20 Hz çalışan bir sistem dünyayı her 50 milisaniyede bir hesaplar.</p>

<p>Sunucu çökmesine karşı karakter durumu periyodik kaydedilir; kritik olaylar mesaj kuyruğuna veya event log’a yazılır. Load balancer yeni bağlantıları sağlıklı sunuculara gönderirken izleme araçları CPU, gecikme ve paket kaybını takip eder. Sonuçta kesintisiz görünen fantastik dünya; bölümlendirme, ilgi alanı filtreleme, otoriter simülasyon ve dikkatli veri yönetiminin birlikte yaptığı oldukça gerçek bir mühendislik büyüsüdür.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="mmorpg" /><category term="sunucu-mimarisi" /><category term="dağıtık-sistemler" /><category term="oyun-programlama" /><category term="ağ-programlama" /><category term="ölçeklenebilirlik" /><summary type="html"><![CDATA[Bir MMORPG dünyasına bağlanıp kalabalık bir şehre girdiğinizde yüzlerce oyuncuyu koşarken, ticaret yaparken ve devasa yaratıklarla savaşırken görebilirsiniz. Ekrandaki bu canlılığın arkasında ise tek bir süper bilgisayar değil; görevleri paylaşan, birbirleriyle sürekli haberleşen ve arızalara karşı hazırlıklı çalışan dağıtık sunucular bulunur.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/mmorpg-sunucu-mimarisi-78.png" /><media:content medium="image" url="https://program.sonsuz.us/img/mmorpg-sunucu-mimarisi-78.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Order Book Algoritmaları: Alış ve Satış Emirlerinden Piyasanın Yapısını Okumak</title><link href="https://program.sonsuz.us/posts/order-book-algoritmalari-alis-ve-satis-emirlerinden-piyasanin-yapisini-okumak/" rel="alternate" type="text/html" title="Order Book Algoritmaları: Alış ve Satış Emirlerinden Piyasanın Yapısını Okumak" /><published>2026-10-23T00:00:00+00:00</published><updated>2026-10-23T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/order-book-algoritmalari-alis-ve-satis-emirlerinden-piyasanin-yapisini-okumak</id><content type="html" xml:base="https://program.sonsuz.us/posts/order-book-algoritmalari-alis-ve-satis-emirlerinden-piyasanin-yapisini-okumak/"><![CDATA[<p><img src="/img/order-book-algoritmalari-36.svg" alt="order-book-algoritmalari-36" /></p>

<p>Bir finansal piyasayı yalnızca son işlem fiyatından izlemek, futbol maçını sadece skor tabelasından takip etmeye benzer. Order book, yani emir defteri ise sahanın tamamını gösterir: Hangi fiyatlarda alıcılar bekliyor, satıcılar nerede yoğunlaşıyor ve likidite hangi tarafta inceliyor? Doğru algoritmalarla bu hareketli tabloyu inceleyerek piyasanın kısa vadeli yapısı hakkında değerli ipuçları çıkarabiliriz.</p>

<p>``</p>

<h2 id="emir-defterinin-temel-mantığı">Emir defterinin temel mantığı</h2>

<p>Emir defteri, gerçekleşmeyi bekleyen limit alış ve satış emirlerinin fiyat seviyelerine göre sıralanmış hâlidir. En yüksek alış fiyatına <strong>best bid</strong>, en düşük satış fiyatına ise <strong>best ask</strong> denir. Bu iki fiyat arasındaki fark spread olarak tanımlanır:</p>

\[S = P_{ask} - P_{bid}\]

<p>Spread küçüldükçe piyasanın genellikle daha likit olduğu düşünülür. Ancak tek başına spread yeterli değildir. En iyi fiyat seviyesinde yalnızca birkaç birim emir varsa büyük bir piyasa emri fiyatı hızla kaydırabilir.</p>

<p>Çoğu borsada eşleştirme motoru <strong>fiyat-zaman önceliği</strong> kullanır. Daha iyi fiyat önceliklidir; aynı fiyattaki emirler arasında önce giren emir önce gerçekleşir. Piyasa emirleri ise beklemez, defterdeki uygun limit emirlerini tüketir.</p>

<table>
  <thead>
    <tr>
      <th>Gösterge</th>
      <th>Ne anlatır?</th>
      <th>Olası yorum</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Dar spread</td>
      <td>Alış ve satış fiyatları yakın</td>
      <td>Yüksek likidite</td>
    </tr>
    <tr>
      <td>Derin bid tarafı</td>
      <td>Alış emirleri yoğun</td>
      <td>Kısa vadeli destek ihtimali</td>
    </tr>
    <tr>
      <td>İnce ask tarafı</td>
      <td>Satış likiditesi düşük</td>
      <td>Yukarı hareket kolaylaşabilir</td>
    </tr>
    <tr>
      <td>Hızlı emir iptali</td>
      <td>Likidite kalıcı değil</td>
      <td>Manipülasyon riski olabilir</td>
    </tr>
  </tbody>
</table>

<h2 id="dengesizlik-ve-mikro-fiyat">Dengesizlik ve mikro fiyat</h2>

<p>Defter analizinin popüler ölçülerinden biri <strong>order book imbalance</strong> değeridir. En iyi seviyedeki alış miktarı $B$, satış miktarı $A$ olsun:</p>

\[I = \frac{B-A}{B+A}\]

<p>$I$ değeri $1$ seviyesine yaklaştığında alış tarafı, $-1$ seviyesine yaklaştığında satış tarafı daha ağırdır. Sıfıra yakın değerler dengeli bir görünüm sunar. Bununla birlikte büyük alış miktarı kesin yükseliş anlamına gelmez; emir gerçekleşmeden iptal edilebilir.</p>

<p>Bir başka ölçü olan mikro fiyat, orta noktayı mevcut miktarlarla ağırlıklandırır:</p>

\[P_{micro} = \frac{P_{ask}B + P_{bid}A}{A+B}\]

<p>Mikro fiyat orta fiyattan yukarıdaysa alış baskısının, aşağıdaysa satış baskısının daha güçlü olduğu düşünülebilir.</p>

<h2 id="python-ile-basit-analiz">Python ile basit analiz</h2>

<p>Aşağıdaki fonksiyon, en iyi alış ve satış seviyelerinden spread, orta fiyat, dengesizlik ve mikro fiyat hesaplar:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">book_metrics</span><span class="p">(</span><span class="n">bids</span><span class="p">,</span> <span class="n">asks</span><span class="p">):</span>
    <span class="c1"># Her eleman: (fiyat, miktar)
</span>    <span class="n">best_bid</span><span class="p">,</span> <span class="n">bid_qty</span> <span class="o">=</span> <span class="nf">max</span><span class="p">(</span><span class="n">bids</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
    <span class="n">best_ask</span><span class="p">,</span> <span class="n">ask_qty</span> <span class="o">=</span> <span class="nf">min</span><span class="p">(</span><span class="n">asks</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>

    <span class="n">spread</span> <span class="o">=</span> <span class="n">best_ask</span> <span class="o">-</span> <span class="n">best_bid</span>
    <span class="n">midpoint</span> <span class="o">=</span> <span class="p">(</span><span class="n">best_bid</span> <span class="o">+</span> <span class="n">best_ask</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span>
    <span class="n">total_qty</span> <span class="o">=</span> <span class="n">bid_qty</span> <span class="o">+</span> <span class="n">ask_qty</span>

    <span class="n">imbalance</span> <span class="o">=</span> <span class="p">(</span><span class="n">bid_qty</span> <span class="o">-</span> <span class="n">ask_qty</span><span class="p">)</span> <span class="o">/</span> <span class="n">total_qty</span>
    <span class="n">microprice</span> <span class="o">=</span> <span class="p">(</span>
        <span class="n">best_ask</span> <span class="o">*</span> <span class="n">bid_qty</span> <span class="o">+</span> <span class="n">best_bid</span> <span class="o">*</span> <span class="n">ask_qty</span>
    <span class="p">)</span> <span class="o">/</span> <span class="n">total_qty</span>

    <span class="k">return</span> <span class="p">{</span>
        <span class="sh">'</span><span class="s">spread</span><span class="sh">'</span><span class="p">:</span> <span class="n">spread</span><span class="p">,</span>
        <span class="sh">'</span><span class="s">midpoint</span><span class="sh">'</span><span class="p">:</span> <span class="n">midpoint</span><span class="p">,</span>
        <span class="sh">'</span><span class="s">imbalance</span><span class="sh">'</span><span class="p">:</span> <span class="n">imbalance</span><span class="p">,</span>
        <span class="sh">'</span><span class="s">microprice</span><span class="sh">'</span><span class="p">:</span> <span class="n">microprice</span>
    <span class="p">}</span>

<span class="n">bids</span> <span class="o">=</span> <span class="p">[(</span><span class="mf">99.90</span><span class="p">,</span> <span class="mi">12</span><span class="p">),</span> <span class="p">(</span><span class="mf">99.80</span><span class="p">,</span> <span class="mi">25</span><span class="p">)]</span>
<span class="n">asks</span> <span class="o">=</span> <span class="p">[(</span><span class="mf">100.00</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span> <span class="p">(</span><span class="mf">100.10</span><span class="p">,</span> <span class="mi">18</span><span class="p">)]</span>
<span class="nf">print</span><span class="p">(</span><span class="nf">book_metrics</span><span class="p">(</span><span class="n">bids</span><span class="p">,</span> <span class="n">asks</span><span class="p">))</span>
</code></pre></div></div>

<p>Bu örnek yalnızca ilk seviyeyi inceler. Gerçek sistemlerde ilk 5, 10 veya 20 fiyat seviyesi ağırlıklı olarak değerlendirilir. Yakın seviyelere daha fazla önem vermek için $w_i=e^{-\lambda i}$ gibi azalan bir ağırlık kullanılabilir.</p>

<h2 id="gürültü-spoofing-ve-doğru-yorum">Gürültü, spoofing ve doğru yorum</h2>

<p>Order book bir niyet tablosudur; gerçekleşmiş işlemlerin kaydı değildir. Büyük bir emir güçlü destek gibi görünürken aniden iptal edilebilir. <strong>Spoofing</strong>, yatırımcıları yanıltmak amacıyla büyük emir gösterip bunları gerçekleşmeden kaldırma davranışıdır. Bu nedenle algoritma; emir ekleme, iptal ve gerçekleşme hızlarını birlikte izlemelidir.</p>

<p>Sağlam bir yaklaşım, order book verisini işlem hacmi, order flow imbalance ve fiyat değişimiyle birleştirir. Ayrıca sonuçlar farklı piyasa koşullarında geriye dönük test edilmelidir. Emir defteri geleceği söyleyen kristal küre değildir; fakat doğru ölçümlerle piyasanın kısa vadeli baskısını gösteren oldukça hassas bir radar olabilir.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="order book" /><category term="algoritmik işlem" /><category term="piyasa mikro yapısı" /><category term="python" /><category term="finans" /><category term="veri analizi" /><summary type="html"><![CDATA[Bir finansal piyasayı yalnızca son işlem fiyatından izlemek, futbol maçını sadece skor tabelasından takip etmeye benzer. Order book, yani emir defteri ise sahanın tamamını gösterir: Hangi fiyatlarda alıcılar bekliyor, satıcılar nerede yoğunlaşıyor ve likidite hangi tarafta inceliyor? Doğru algoritmalarla bu hareketli tabloyu inceleyerek piyasanın kısa vadeli yapısı hakkında değerli ipuçları çıkarabiliriz.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/order-book-algoritmalari-36.png" /><media:content medium="image" url="https://program.sonsuz.us/img/order-book-algoritmalari-36.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>