<?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-25T12:05:38+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">Ağ Teorisiyle Şehrin Röntgenini Çekmek: Yol Ağlarında Zayıf Nokta Analizi</title><link href="https://program.sonsuz.us/posts/ag-teorisiyle-sehrin-rontgenini-cekmek-yol-aglarinda-zayif-nokta-analizi/" rel="alternate" type="text/html" title="Ağ Teorisiyle Şehrin Röntgenini Çekmek: Yol Ağlarında Zayıf Nokta Analizi" /><published>2026-10-25T00:00:00+00:00</published><updated>2026-10-25T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/ag-teorisiyle-sehrin-rontgenini-cekmek-yol-aglarinda-zayif-nokta-analizi</id><content type="html" xml:base="https://program.sonsuz.us/posts/ag-teorisiyle-sehrin-rontgenini-cekmek-yol-aglarinda-zayif-nokta-analizi/"><![CDATA[<p>Bir şehir haritasına baktığınızda yalnızca yollar, kavşaklar ve döner kavşakta çıkışı kaçıran sürücüler görmeyin. Aynı harita, matematiksel olarak incelenebilen dev bir ağdır. Graf teorisi sayesinde hangi kavşağın kritik olduğunu, bir köprü kapandığında ulaşımın ne kadar etkileneceğini ve alternatif güzergâhların gerçekten işe yarayıp yaramadığını ölçebiliriz.
``</p>
<h2 id="şehri-bir-grafa-dönüştürmek">Şehri bir grafa dönüştürmek</h2>

<p>Graf, düğümlerden ve bu düğümleri bağlayan kenarlardan oluşur. Yol ağı modelinde kavşaklar veya yol başlangıçları <strong>düğüm</strong>, yollar ise <strong>kenar</strong> olarak temsil edilir. Matematiksel gösterimle bir graf:</p>

\[G = (V, E)\]

<p>şeklinde tanımlanır. Burada $V$ düğüm kümesini, $E$ ise yol bağlantılarını ifade eder. Tek yönlü yolların bulunduğu şehirlerde yönlü graf; bütün yolların iki yönde kullanılabildiği basitleştirilmiş modellerde yönsüz graf tercih edilir.</p>

<p>Kenarlar yalnızca bağlantı anlamına gelmek zorunda değildir. Her yola uzunluk, seyahat süresi veya kapasite gibi bir ağırlık atanabilir:</p>

\[w(u,v) = \text{seyahat süresi}\]

<table>
  <thead>
    <tr>
      <th>Model öğesi</th>
      <th>Şehirdeki karşılığı</th>
      <th>Örnek özellik</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Düğüm</td>
      <td>Kavşak, durak, yol sonu</td>
      <td>Konum, trafik yoğunluğu</td>
    </tr>
    <tr>
      <td>Kenar</td>
      <td>Yol veya köprü</td>
      <td>Uzunluk, hız, kapasite</td>
    </tr>
    <tr>
      <td>Ağırlık</td>
      <td>Geçiş maliyeti</td>
      <td>Süre, mesafe, yakıt</td>
    </tr>
    <tr>
      <td>Yön</td>
      <td>İzin verilen hareket</td>
      <td>Tek yönlü cadde</td>
    </tr>
  </tbody>
</table>

<h2 id="zayıf-nokta-ne-demektir">Zayıf nokta ne demektir?</h2>

<p>Bir yolun kalabalık olması, onun mutlaka yapısal bir zayıflık olduğu anlamına gelmez. Zayıf nokta; devre dışı kaldığında ağın parçalanmasına, seyahat sürelerinin ciddi biçimde artmasına veya alternatif yolların aşırı yüklenmesine neden olan bileşendir.</p>

<p>Bu noktaları belirlemek için çeşitli merkezilik ölçüleri kullanılır:</p>

<ul>
  <li><strong>Derece merkeziliği:</strong> Bir kavşağın kaç doğrudan bağlantısı bulunduğunu ölçer.</li>
  <li><strong>Aradalık merkeziliği:</strong> En kısa rotaların ne kadarının ilgili düğümden geçtiğini gösterir.</li>
  <li><strong>Yakınlık merkeziliği:</strong> Bir düğümden diğer noktalara ortalama erişim kolaylığını ölçer.</li>
  <li><strong>Özvektör merkeziliği:</strong> Önemli kavşaklara bağlı olan kavşakları öne çıkarır.</li>
</ul>

<p>Aradalık merkeziliği kabaca şöyle hesaplanır:</p>

\[C_B(v) = \sum_{s \neq v \neq t} \frac{\sigma_{st}(v)}{\sigma_{st}}\]

<p>Burada $\sigma_{st}$, $s$ ile $t$ arasındaki en kısa yolların sayısı; $\sigma_{st}(v)$ ise bunlardan $v$ düğümünden geçenlerin sayısıdır. Değeri yüksek bir kavşak, şehrin trafik dünyasındaki “herkesin tanıdığı aracı kişi” gibidir.</p>

<table>
  <thead>
    <tr>
      <th>Ölçüm</th>
      <th>Yanıtladığı soru</th>
      <th>Olası kullanım</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Derece</td>
      <td>Kaç yola bağlı?</td>
      <td>Yoğun kavşak tespiti</td>
    </tr>
    <tr>
      <td>Aradalık</td>
      <td>Kaç rota buradan geçiyor?</td>
      <td>Kritik geçiş analizi</td>
    </tr>
    <tr>
      <td>Yakınlık</td>
      <td>Diğer noktalara ne kadar yakın?</td>
      <td>Acil servis konumu</td>
    </tr>
    <tr>
      <td>Köprü kenar</td>
      <td>Kapanırsa ağ bölünür mü?</td>
      <td>Köprü ve tünel riski</td>
    </tr>
  </tbody>
</table>

<h2 id="python-ve-networkx-ile-küçük-bir-deney">Python ve NetworkX ile küçük bir deney</h2>

<p>Aşağıdaki kod örnek bir yol ağı oluşturur, aradalık merkeziliğini hesaplar ve kaldırıldığında ağı bölen kritik yolları bulur:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">networkx</span> <span class="k">as</span> <span class="n">nx</span>

<span class="n">G</span> <span class="o">=</span> <span class="n">nx</span><span class="p">.</span><span class="nc">Graph</span><span class="p">()</span>
<span class="n">G</span><span class="p">.</span><span class="nf">add_weighted_edges_from</span><span class="p">([</span>
    <span class="p">(</span><span class="sh">'</span><span class="s">A</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">B</span><span class="sh">'</span><span class="p">,</span> <span class="mi">4</span><span class="p">),</span>
    <span class="p">(</span><span class="sh">'</span><span class="s">B</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">C</span><span class="sh">'</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
    <span class="p">(</span><span class="sh">'</span><span class="s">C</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">D</span><span class="sh">'</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span>
    <span class="p">(</span><span class="sh">'</span><span class="s">B</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">D</span><span class="sh">'</span><span class="p">,</span> <span class="mi">6</span><span class="p">),</span>
    <span class="p">(</span><span class="sh">'</span><span class="s">D</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">E</span><span class="sh">'</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
    <span class="p">(</span><span class="sh">'</span><span class="s">E</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">F</span><span class="sh">'</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="p">])</span>

<span class="n">centrality</span> <span class="o">=</span> <span class="n">nx</span><span class="p">.</span><span class="nf">betweenness_centrality</span><span class="p">(</span><span class="n">G</span><span class="p">,</span> <span class="n">weight</span><span class="o">=</span><span class="sh">'</span><span class="s">weight</span><span class="sh">'</span><span class="p">)</span>
<span class="n">critical_nodes</span> <span class="o">=</span> <span class="nf">sorted</span><span class="p">(</span>
    <span class="n">centrality</span><span class="p">.</span><span class="nf">items</span><span class="p">(),</span>
    <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">item</span><span class="p">:</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span>
    <span class="n">reverse</span><span class="o">=</span><span class="bp">True</span>
<span class="p">)</span>

<span class="nf">print</span><span class="p">(</span><span class="sh">'</span><span class="s">Kritik kavşaklar:</span><span class="sh">'</span><span class="p">,</span> <span class="n">critical_nodes</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sh">'</span><span class="s">Kritik yollar:</span><span class="sh">'</span><span class="p">,</span> <span class="nf">list</span><span class="p">(</span><span class="n">nx</span><span class="p">.</span><span class="nf">bridges</span><span class="p">(</span><span class="n">G</span><span class="p">)))</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">betweenness_centrality</code>, kısa rotalarda sık kullanılan kavşakları sıralar. <code class="language-plaintext highlighter-rouge">bridges</code> ise kaldırıldığında ağın bağlı bileşen sayısını artıran kenarları döndürür. Gerçek bir projede yol verileri OpenStreetMap üzerinden alınabilir; <code class="language-plaintext highlighter-rouge">osmnx</code> kütüphanesiyle indirilen ağ doğrudan NetworkX grafına dönüştürülebilir.</p>

<h2 id="dayanıklılığı-sınamak">Dayanıklılığı sınamak</h2>

<p>Analizin en eğlenceli kısmı kontrollü kaostur: Kritik bir düğümü silip sonuçları yeniden hesaplayın. Ortalama en kısa yol uzuyor mu? Bazı mahalleler tamamen kopuyor mu? Alternatif yollar kapasiteyi karşılıyor mu?</p>

<p>Rastgele kapanmalar ile yüksek merkezilikli yolların hedefli kapanmalarını karşılaştırmak da önemlidir. Ağ rastgele arızalara dayanırken tek bir stratejik köprüye bağımlı olabilir. Böylece yeni bağlantıların nereye yapılacağı, acil durum rotalarının nasıl tasarlanacağı ve bakım önceliğinin hangi yollara verileceği sezgiyle değil, ölçülebilir verilerle belirlenir. Kısacası graf teorisi, şehir haritasını sadece göstermez; haritanın nereden çatlayabileceğini de anlatır.</p>

<p><img src="/img/ag-teorisiyle-sehrin-49.svg" alt="ag-teorisiyle-sehrin-49" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="graf teorisi" /><category term="ağ analizi" /><category term="python" /><category term="şehir planlama" /><category term="networkx" /><category term="veri bilimi" /><summary type="html"><![CDATA[Bir şehir haritasına baktığınızda yalnızca yollar, kavşaklar ve döner kavşakta çıkışı kaçıran sürücüler görmeyin. Aynı harita, matematiksel olarak incelenebilen dev bir ağdır. Graf teorisi sayesinde hangi kavşağın kritik olduğunu, bir köprü kapandığında ulaşımın ne kadar etkileneceğini ve alternatif güzergâhların gerçekten işe yarayıp yaramadığını ölçebiliriz.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/ag-teorisiyle-sehrin-49.png" /><media:content medium="image" url="https://program.sonsuz.us/img/ag-teorisiyle-sehrin-49.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Akıllı Saat Verileriyle Gerçek Zamanlı Nabız ve Uyku Analizi</title><link href="https://program.sonsuz.us/posts/akilli-saat-verileriyle-gercek-zamanli-nabiz-ve-uyku-analizi/" rel="alternate" type="text/html" title="Akıllı Saat Verileriyle Gerçek Zamanlı Nabız ve Uyku Analizi" /><published>2026-10-25T00:00:00+00:00</published><updated>2026-10-25T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/akilli-saat-verileriyle-gercek-zamanli-nabiz-ve-uyku-analizi</id><content type="html" xml:base="https://program.sonsuz.us/posts/akilli-saat-verileriyle-gercek-zamanli-nabiz-ve-uyku-analizi/"><![CDATA[<p><img src="/img/akilli-saat-verileriyle-20.svg" alt="akilli-saat-verileriyle-20" /></p>

<p>Akıllı saatler yalnızca saati gösteren cihazlar olmaktan çıkıp bileğimizde çalışan küçük sağlık laboratuvarlarına dönüştü. Nabız, hareket, kandaki oksijen oranı ve uyku gibi ölçümler; doğru algoritmalarla işlendiğinde anlamlı eğilimlere ve erken uyarılara dönüştürülebilir. Ancak ham sensör verisini doğrudan yorumlamak, rüzgârlı havada fısıltı dinlemeye benzer: Önce gürültüyü temizlemek gerekir.
``</p>

<h2 id="sensörden-anlamlı-veriye">Sensörden anlamlı veriye</h2>

<p>Akıllı saatler nabzı çoğunlukla <strong>fotopletismografi (PPG)</strong> yöntemiyle ölçer. Cihazın altındaki LED cilde ışık gönderir; fotodiyot ise geri yansıyan ışığın şiddetini ölçer. Kalp her attığında damarlardaki kan hacmi değiştiği için yansıma sinyalinde tepe noktaları oluşur.</p>

<p>Ardışık iki tepe arasındaki süre $\Delta t$ saniye ise yaklaşık nabız şu şekilde hesaplanır:</p>

\[HR = \frac{60}{\Delta t}\]

<p>Örneğin iki tepe arasındaki süre $0.8$ saniyeyse nabız $75$ BPM olur. Gerçek dünyada hareket, gevşek kayış, ter ve ortam ışığı sinyali bozabilir. Bu nedenle filtreleme, tepe tespiti ve güven puanı hesaplama aşamaları önemlidir.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Avantajı</th>
      <th>Dezavantajı</th>
      <th>Kullanım alanı</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Hareketli ortalama</td>
      <td>Basit ve hızlıdır</td>
      <td>Ani değişimleri yumuşatabilir</td>
      <td>Canlı nabız göstergesi</td>
    </tr>
    <tr>
      <td>Medyan filtresi</td>
      <td>Sıçramaları temizler</td>
      <td>Büyük pencere gecikme yaratır</td>
      <td>Sensör hatalarının giderilmesi</td>
    </tr>
    <tr>
      <td>Butterworth filtresi</td>
      <td>Frekansları kontrollü süzer</td>
      <td>Parametre ayarı gerekir</td>
      <td>PPG sinyal işleme</td>
    </tr>
    <tr>
      <td>Makine öğrenmesi</td>
      <td>Karmaşık örüntüleri bulur</td>
      <td>Etiketli veri gerektirir</td>
      <td>Uyku evresi tahmini</td>
    </tr>
  </tbody>
</table>

<h2 id="gerçek-zamanlı-nabız-işleme">Gerçek zamanlı nabız işleme</h2>

<p>Aşağıdaki Python sınıfı, saatten geldiği varsayılan BPM değerlerini kayan pencereye ekler. Medyan kullanarak aykırı ölçümlerin etkisini azaltır ve son değerlerin değişkenliğine göre basit bir güven puanı üretir.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">collections</span> <span class="kn">import</span> <span class="n">deque</span>
<span class="kn">from</span> <span class="n">statistics</span> <span class="kn">import</span> <span class="n">median</span><span class="p">,</span> <span class="n">pstdev</span>

<span class="k">class</span> <span class="nc">HeartRateStream</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="n">window_size</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>
        <span class="n">self</span><span class="p">.</span><span class="n">values</span> <span class="o">=</span> <span class="nf">deque</span><span class="p">(</span><span class="n">maxlen</span><span class="o">=</span><span class="n">window_size</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="n">bpm</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="mi">30</span> <span class="o">&lt;=</span> <span class="n">bpm</span> <span class="o">&lt;=</span> <span class="mi">220</span><span class="p">:</span>
            <span class="k">return</span> <span class="p">{</span><span class="sh">'</span><span class="s">status</span><span class="sh">'</span><span class="p">:</span> <span class="sh">'</span><span class="s">invalid</span><span class="sh">'</span><span class="p">}</span>

        <span class="n">self</span><span class="p">.</span><span class="n">values</span><span class="p">.</span><span class="nf">append</span><span class="p">(</span><span class="n">bpm</span><span class="p">)</span>
        <span class="n">filtered</span> <span class="o">=</span> <span class="nf">median</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">values</span><span class="p">)</span>
        <span class="n">deviation</span> <span class="o">=</span> <span class="nf">pstdev</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">values</span><span class="p">)</span> <span class="k">if</span> <span class="nf">len</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">values</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="mi">0</span>
        <span class="n">confidence</span> <span class="o">=</span> <span class="nf">max</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span> <span class="o">-</span> <span class="n">deviation</span> <span class="o">/</span> <span class="mi">20</span><span class="p">)</span>

        <span class="k">return</span> <span class="p">{</span>
            <span class="sh">'</span><span class="s">status</span><span class="sh">'</span><span class="p">:</span> <span class="sh">'</span><span class="s">ok</span><span class="sh">'</span><span class="p">,</span>
            <span class="sh">'</span><span class="s">bpm</span><span class="sh">'</span><span class="p">:</span> <span class="nf">round</span><span class="p">(</span><span class="n">filtered</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
            <span class="sh">'</span><span class="s">confidence</span><span class="sh">'</span><span class="p">:</span> <span class="nf">round</span><span class="p">(</span><span class="n">confidence</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
        <span class="p">}</span>

<span class="n">stream</span> <span class="o">=</span> <span class="nc">HeartRateStream</span><span class="p">()</span>
<span class="k">for</span> <span class="n">measurement</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">74</span><span class="p">,</span> <span class="mi">76</span><span class="p">,</span> <span class="mi">75</span><span class="p">,</span> <span class="mi">140</span><span class="p">,</span> <span class="mi">77</span><span class="p">,</span> <span class="mi">76</span><span class="p">]:</span>
    <span class="nf">print</span><span class="p">(</span><span class="n">stream</span><span class="p">.</span><span class="nf">update</span><span class="p">(</span><span class="n">measurement</span><span class="p">))</span>
</code></pre></div></div>

<p>Buradaki <code class="language-plaintext highlighter-rouge">140</code> değeri tek başına geldiğinde medyanı dramatik biçimde değiştirmez. Bununla birlikte gerçek bir egzersiz sırasında yükselen nabzın yanlışlıkla gürültü sayılmaması için ivmeölçer verisi de kullanılmalıdır. Kullanıcı koşuyorsa yüksek nabız beklenebilir; koltukta oturuyorsa aynı ölçüm daha dikkat çekicidir.</p>

<h2 id="uyku-nasıl-tahmin-edilir">Uyku nasıl tahmin edilir?</h2>

<p>Uyku analizi genellikle ivmeölçer hareketleri, nabız ve kalp atışları arasındaki değişkenliği birleştirir. Basit bir modelde düşük hareket ve düşen nabız uykuya işaret eder. Daha gelişmiş sistemler uyanıklık, hafif uyku, derin uyku ve REM sınıflarını tahmin eder.</p>

<p>Bir özellik vektörü şöyle tanımlanabilir:</p>

\[x = [HR_{avg}, HRV, movement, oxygen]\]

<p>Bu değerler karar ağacı, lojistik regresyon veya sinir ağına verilebilir. Başlangıç projesinde açıklanabilir olduğu için karar ağacı iyi bir seçimdir. Veriler 30 saniyelik ya da bir dakikalık pencerelere bölünerek her pencere için ortalama, standart sapma ve hareket toplamı hesaplanabilir.</p>

<h2 id="sağlık-verisinde-kritik-ayrıntılar">Sağlık verisinde kritik ayrıntılar</h2>

<p>Gerçek zamanlı sistem, eksik paketleri ve Bluetooth kopmalarını yönetmelidir. Ölçümlere zaman damgası eklenmeli, veriler aktarımda ve depolamada şifrelenmeli, kullanıcıdan açık izin alınmalıdır. Ayrıca bu algoritmalar tıbbi teşhis koymamalıdır. “Düzensiz ölçüm algılandı” demek, “Kalp hastalığınız var” demekten hem teknik hem etik açıdan daha doğrudur.</p>

<p>Bu projeyi büyütmek için FastAPI ile veri kabul eden bir servis, WebSocket ile canlı panel ve kişiye özel normal değerleri öğrenen bir anomali modeli ekleyebilirsiniz. Böylece bilekte başlayan küçük sinyal, güvenli ve açıklanabilir bir sağlık analizi sistemine dönüşür.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Proje" /><category term="giyilebilir-teknoloji" /><category term="sağlık-verisi" /><category term="python" /><category term="gerçek-zamanlı-analiz" /><category term="sinyal-işleme" /><category term="makine-öğrenmesi" /><summary type="html"><![CDATA[Akıllı saatler yalnızca saati gösteren cihazlar olmaktan çıkıp bileğimizde çalışan küçük sağlık laboratuvarlarına dönüştü. Nabız, hareket, kandaki oksijen oranı ve uyku gibi ölçümler; doğru algoritmalarla işlendiğinde anlamlı eğilimlere ve erken uyarılara dönüştürülebilir. Ancak ham sensör verisini doğrudan yorumlamak, rüzgârlı havada fısıltı dinlemeye benzer: Önce gürültüyü temizlemek gerekir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/akilli-saat-verileriyle-20.png" /><media:content medium="image" url="https://program.sonsuz.us/img/akilli-saat-verileriyle-20.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Akıllı Sayaçlarla Enerji Şebekesi Optimizasyonu</title><link href="https://program.sonsuz.us/posts/akilli-sayaclarla-enerji-sebekesi-optimizasyonu/" rel="alternate" type="text/html" title="Akıllı Sayaçlarla Enerji Şebekesi Optimizasyonu" /><published>2026-10-25T00:00:00+00:00</published><updated>2026-10-25T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/akilli-sayaclarla-enerji-sebekesi-optimizasyonu</id><content type="html" xml:base="https://program.sonsuz.us/posts/akilli-sayaclarla-enerji-sebekesi-optimizasyonu/"><![CDATA[<p>Bir şehir aynı anda uyanıp kahve makinelerini, klimaları ve fabrikaları çalıştırdığında elektrik şebekesi ciddi bir denge sınavına girer. Geleneksel sayaçlar yalnızca dönemsel tüketimi gösterirken akıllı sayaçlar, tüketimi kısa aralıklarla ölçerek şebekenin adeta nabzını tutar. Böylece enerji üretimi, depolama sistemleri ve tüketici talepleri gerçek zamanlı verilere göre yönetilebilir.</p>

<p>``</p>

<h2 id="akıllı-sayaç-verisi-nedir">Akıllı sayaç verisi nedir?</h2>

<p>Akıllı sayaçlar elektrik tüketimini genellikle 1, 5, 15 veya 30 dakikalık aralıklarla kaydeder. Her ölçüm; zaman damgası, tüketilen enerji, gerilim, akım ve bazı sistemlerde güç faktörü gibi alanlar içerebilir. Veriler güvenli iletişim ağları üzerinden merkezi bir yönetim platformuna gönderilir.</p>

<p>Bir sayacın belirli bir aralıktaki ortalama gücü basitçe şöyle hesaplanabilir:</p>

\[P = E / t\]

<p>Burada $E$ tüketilen enerji, $t$ ölçüm süresi ve $P$ ortalama güçtür. Şehir genelindeki toplam talep ise $N$ sayacın katkısıyla bulunur:</p>

\[P_{toplam}(t) = \sum_{i=1}^{N} P_i(t)\]

<p>Bu toplam, santrallerin ve bataryaların karşılaması gereken anlık yükü temsil eder. Üretim ile tüketim dengelenemezse frekans sapmaları, kesintiler veya ekipman hasarları ortaya çıkabilir.</p>

<h2 id="geleneksel-ve-akıllı-yaklaşım">Geleneksel ve akıllı yaklaşım</h2>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>Geleneksel sayaç</th>
      <th>Akıllı sayaç</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Ölçüm sıklığı</td>
      <td>Aylık</td>
      <td>Dakikalık veya saatlik</td>
    </tr>
    <tr>
      <td>Veri aktarımı</td>
      <td>Görevli tarafından</td>
      <td>Otomatik ve uzaktan</td>
    </tr>
    <tr>
      <td>Arıza tespiti</td>
      <td>Gecikmeli</td>
      <td>Gerçek zamana yakın</td>
    </tr>
    <tr>
      <td>Talep tahmini</td>
      <td>Sınırlı</td>
      <td>Ayrıntılı ve dinamik</td>
    </tr>
    <tr>
      <td>Fiyatlandırma</td>
      <td>Genellikle sabit</td>
      <td>Zamana bağlı olabilir</td>
    </tr>
  </tbody>
</table>

<p>Akıllı sistem, yalnızca daha fazla veri toplamaz; şehrin davranış kalıplarını görünür hâle getirir. Örneğin sıcaklık yükseldiğinde klima tüketiminin ne kadar artacağı veya bir futbol maçı bittiğinde talebin nasıl sıçrayacağı tahmin edilebilir.</p>

<h2 id="veriden-dengelemeye-giden-yol">Veriden dengelemeye giden yol</h2>

<p>İlk aşama veri temizliğidir. Eksik ölçümler enterpolasyonla tamamlanabilir, fiziksel olarak imkânsız değerler aykırı veri olarak işaretlenebilir. Ardından hava durumu, takvim, resmi tatiller ve geçmiş tüketim gibi değişkenlerle talep tahmini yapılır.</p>

<p>Basitleştirilmiş bir Python örneği, hareketli ortalama kullanarak kısa vadeli yük tahmini üretir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">pandas</span> <span class="k">as</span> <span class="n">pd</span>

<span class="n">veri</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="nf">read_csv</span><span class="p">(</span><span class="sh">"</span><span class="s">sayac_verisi.csv</span><span class="sh">"</span><span class="p">,</span> <span class="n">parse_dates</span><span class="o">=</span><span class="p">[</span><span class="sh">"</span><span class="s">zaman</span><span class="sh">"</span><span class="p">])</span>
<span class="n">veri</span> <span class="o">=</span> <span class="n">veri</span><span class="p">.</span><span class="nf">sort_values</span><span class="p">(</span><span class="sh">"</span><span class="s">zaman</span><span class="sh">"</span><span class="p">)</span>

<span class="c1"># Son dört ölçümün ortalaması kısa vadeli tahmin olarak kullanılır.
</span><span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">tahmin_kw</span><span class="sh">"</span><span class="p">]</span> <span class="o">=</span> <span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">tuketim_kw</span><span class="sh">"</span><span class="p">].</span><span class="nf">rolling</span><span class="p">(</span><span class="mi">4</span><span class="p">).</span><span class="nf">mean</span><span class="p">()</span>

<span class="c1"># Gerçek tüketim ile tahmin arasındaki fark hesaplanır.
</span><span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">denge_ihtiyaci_kw</span><span class="sh">"</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
    <span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">tuketim_kw</span><span class="sh">"</span><span class="p">]</span> <span class="o">-</span> <span class="n">veri</span><span class="p">[</span><span class="sh">"</span><span class="s">tahmin_kw</span><span class="sh">"</span><span class="p">]</span>
<span class="p">)</span>

<span class="nf">print</span><span class="p">(</span><span class="n">veri</span><span class="p">.</span><span class="nf">tail</span><span class="p">())</span>
</code></pre></div></div>

<p>Bu yöntem öğretici olsa da gerçek sistemlerde ARIMA, gradyan artırma, LSTM veya Transformer tabanlı modeller kullanılabilir. Tahmin edilen talep üretim planına aktarılır. Beklenmedik bir artış varsa bataryalar devreye alınabilir; düşüş varsa üretim azaltılabilir ya da fazla enerji depolanabilir.</p>

<h2 id="talep-tarafı-yönetimi">Talep tarafı yönetimi</h2>

<p>Optimizasyon yalnızca daha fazla elektrik üretmek anlamına gelmez. Yoğun saatlerde elektrikli araç şarjını ertelemek, ticari binaların klimalarını küçük ölçüde ayarlamak veya tüketicilere indirim sunmak da denge sağlar. Amaç maliyeti ifade eden $C$, emisyonu ifade eden $M$ ve kesinti riskini ifade eden $R$ değerlerini birlikte küçültmektir:</p>

\[minimize\quad \alpha C + \beta M + \gamma R\]

<p>Katsayılar şehrin önceliklerini temsil eder. Çevreci bir yönetim $\beta$ değerini, kesintiye karşı hassas bir hastane bölgesi ise $\gamma$ değerini yükseltebilir.</p>

<h2 id="güvenlik-ve-mahremiyet">Güvenlik ve mahremiyet</h2>

<p>Ayrıntılı tüketim verisi, insanların evde olup olmadığına dair ipuçları verebilir. Bu nedenle veriler şifrelenmeli, mümkün olduğunda anonimleştirilmeli ve yalnızca gerekli süre boyunca saklanmalıdır. Ayrıca sayaç yazılımları güncel tutulmalı ve sahte ölçümlere karşı doğrulama mekanizmaları kullanılmalıdır.</p>

<p>Sonuç olarak akıllı sayaçlar, elektrik faturasını dijitalleştiren cihazlardan çok daha fazlasıdır. Doğru veri mühendisliği ve optimizasyon yöntemleriyle şehirler daha az kayıp yaşayan, yenilenebilir kaynakları daha iyi kullanan ve talep sıçramalarına daha çevik tepki veren enerji sistemleri kurabilir.</p>

<p><img src="/img/akilli-sayaclarla-enerji-71.svg" alt="akilli-sayaclarla-enerji-71" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="akıllı sayaç" /><category term="enerji optimizasyonu" /><category term="akıllı şebeke" /><category term="veri analizi" /><category term="makine öğrenmesi" /><category term="python" /><summary type="html"><![CDATA[Bir şehir aynı anda uyanıp kahve makinelerini, klimaları ve fabrikaları çalıştırdığında elektrik şebekesi ciddi bir denge sınavına girer. Geleneksel sayaçlar yalnızca dönemsel tüketimi gösterirken akıllı sayaçlar, tüketimi kısa aralıklarla ölçerek şebekenin adeta nabzını tutar. Böylece enerji üretimi, depolama sistemleri ve tüketici talepleri gerçek zamanlı verilere göre yönetilebilir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/akilli-sayaclarla-enerji-71.png" /><media:content medium="image" url="https://program.sonsuz.us/img/akilli-sayaclarla-enerji-71.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Derin Öğrenme ile Yapraklardan Bitki Hastalığı Tespiti</title><link href="https://program.sonsuz.us/posts/derin-ogrenme-ile-yapraklardan-bitki-hastaligi-tespiti/" rel="alternate" type="text/html" title="Derin Öğrenme ile Yapraklardan Bitki Hastalığı Tespiti" /><published>2026-10-25T00:00:00+00:00</published><updated>2026-10-25T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/derin-ogrenme-ile-yapraklardan-bitki-hastaligi-tespiti</id><content type="html" xml:base="https://program.sonsuz.us/posts/derin-ogrenme-ile-yapraklardan-bitki-hastaligi-tespiti/"><![CDATA[<p>Bir yaprağın üzerindeki küçük kahverengi lekeler çiftçi için ciddi bir uyarı, evrişimli sinir ağı içinse sınıflandırılmayı bekleyen görsel örüntülerdir. Derin öğrenme sayesinde yaprak fotoğraflarını analiz ederek bitkinin sağlıklı olup olmadığını ve olası hastalık türünü otomatik biçimde tahmin edebiliriz. Böyle bir sistem, uzmanların yerini almak yerine erken tarama yapan dijital bir tarım asistanı gibi çalışır.</p>

<p>``</p>

<h2 id="evrişimli-sinir-ağı-neyi-öğrenir">Evrişimli sinir ağı neyi öğrenir?</h2>

<p>Klasik makine öğrenmesinde renk, kenar veya doku gibi özellikleri elle çıkarmamız gerekir. Evrişimli sinir ağları, yani CNN’ler, uygun özellikleri eğitim verisinden kendileri öğrenir. İlk katmanlar yaprak kenarlarını ve renk geçişlerini; daha derin katmanlar ise pas lekesi, küf dokusu veya damar bozulması gibi karmaşık yapıları yakalayabilir.</p>

<p>Bir evrişim filtresinin görüntü üzerindeki temel işlemi şöyle gösterilebilir:</p>

\[Y(i,j)=\sum_m\sum_n X(i+m,j+n)K(m,n)+b\]

<p>Burada $X$ giriş görüntüsünü, $K$ öğrenilen filtreyi, $b$ sapmayı ve $Y$ özellik haritasını temsil eder. Modelin son katmanındaki <strong>softmax</strong>, her hastalık için olasılık üretir:</p>

\[P(y=k)=\frac{e^{z_k}}{\sum_{j=1}^{C}e^{z_j}}\]

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Özellik çıkarımı</th>
      <th style="text-align: right">Veri ihtiyacı</th>
      <th>Esneklik</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Geleneksel makine öğrenmesi</td>
      <td>Elle tasarlanır</td>
      <td style="text-align: right">Orta</td>
      <td>Sınırlı</td>
    </tr>
    <tr>
      <td>Sıfırdan CNN eğitimi</td>
      <td>Otomatik</td>
      <td style="text-align: right">Yüksek</td>
      <td>Yüksek</td>
    </tr>
    <tr>
      <td>Transfer öğrenme</td>
      <td>Önceden öğrenilmiş</td>
      <td style="text-align: right">Daha düşük</td>
      <td>Çok yüksek</td>
    </tr>
  </tbody>
</table>

<p>Küçük ve orta ölçekli tarım veri kümelerinde transfer öğrenme genellikle en pratik seçenektir. ImageNet üzerinde eğitilmiş ResNet veya EfficientNet gibi bir model, görsel dünyaya ilişkin temel bilgisini yapraklara aktarabilir.</p>

<h2 id="veri-hazırlığı-modelin-gerçek-besini">Veri hazırlığı: Modelin gerçek besini</h2>

<p>Fotoğraflar hastalık sınıflarına göre klasörlenebilir. Veri; eğitim, doğrulama ve test kümelerine ayrılmalıdır. Aynı yaprağın farklı çekimlerinin iki ayrı kümeye düşmesi <strong>veri sızıntısına</strong> yol açar ve gerçekte başarısız olan modeli kâğıt üzerinde dâhi gibi gösterebilir.</p>

<p>Döndürme, kırpma, parlaklık değiştirme ve yatay çevirme gibi veri artırma işlemleri modeli farklı çekim koşullarına hazırlar. Ancak yaprağın doğal görünümünü bozacak aşırı renk dönüşümleri kullanılmamalıdır. Ayrıca sınıflar dengesizse ağırlıklı kayıp fonksiyonu veya örnekleme yöntemleri düşünülmelidir.</p>

<h2 id="pytorch-ile-transfer-öğrenme">PyTorch ile transfer öğrenme</h2>

<p>Aşağıdaki örnek, önceden eğitilmiş ResNet18 modelinin son katmanını hastalık sınıflarına uyarlayarak tek bir eğitim adımı gerçekleştirir:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="n">torch</span>
<span class="kn">from</span> <span class="n">torch</span> <span class="kn">import</span> <span class="n">nn</span>
<span class="kn">from</span> <span class="n">torchvision.models</span> <span class="kn">import</span> <span class="n">resnet18</span><span class="p">,</span> <span class="n">ResNet18_Weights</span>

<span class="n">sinif_sayisi</span> <span class="o">=</span> <span class="mi">5</span>
<span class="n">model</span> <span class="o">=</span> <span class="nf">resnet18</span><span class="p">(</span><span class="n">weights</span><span class="o">=</span><span class="n">ResNet18_Weights</span><span class="p">.</span><span class="n">DEFAULT</span><span class="p">)</span>
<span class="n">model</span><span class="p">.</span><span class="n">fc</span> <span class="o">=</span> <span class="n">nn</span><span class="p">.</span><span class="nc">Linear</span><span class="p">(</span><span class="n">model</span><span class="p">.</span><span class="n">fc</span><span class="p">.</span><span class="n">in_features</span><span class="p">,</span> <span class="n">sinif_sayisi</span><span class="p">)</span>

<span class="n">kayip_fonksiyonu</span> <span class="o">=</span> <span class="n">nn</span><span class="p">.</span><span class="nc">CrossEntropyLoss</span><span class="p">()</span>
<span class="n">optimizasyon</span> <span class="o">=</span> <span class="n">torch</span><span class="p">.</span><span class="n">optim</span><span class="p">.</span><span class="nc">Adam</span><span class="p">(</span><span class="n">model</span><span class="p">.</span><span class="nf">parameters</span><span class="p">(),</span> <span class="n">lr</span><span class="o">=</span><span class="mf">1e-4</span><span class="p">)</span>

<span class="n">model</span><span class="p">.</span><span class="nf">train</span><span class="p">()</span>
<span class="n">gorseller</span><span class="p">,</span> <span class="n">etiketler</span> <span class="o">=</span> <span class="nf">next</span><span class="p">(</span><span class="nf">iter</span><span class="p">(</span><span class="n">egitim_yukleyici</span><span class="p">))</span>
<span class="n">optimizasyon</span><span class="p">.</span><span class="nf">zero_grad</span><span class="p">()</span>
<span class="n">tahminler</span> <span class="o">=</span> <span class="nf">model</span><span class="p">(</span><span class="n">gorseller</span><span class="p">)</span>
<span class="n">kayip</span> <span class="o">=</span> <span class="nf">kayip_fonksiyonu</span><span class="p">(</span><span class="n">tahminler</span><span class="p">,</span> <span class="n">etiketler</span><span class="p">)</span>
<span class="n">kayip</span><span class="p">.</span><span class="nf">backward</span><span class="p">()</span>
<span class="n">optimizasyon</span><span class="p">.</span><span class="nf">step</span><span class="p">()</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">CrossEntropyLoss</code>, doğru sınıfın olasılığını yükseltmesi için modeli cezalandırır; <code class="language-plaintext highlighter-rouge">backward()</code> gradyanları hesaplar, <code class="language-plaintext highlighter-rouge">step()</code> ise ağırlıkları günceller. Görsellerin modelin beklediği boyuta ve normalizasyon değerlerine dönüştürülmesi gerektiği unutulmamalıdır.</p>

<h2 id="başarıyı-doğru-ölçmek">Başarıyı doğru ölçmek</h2>

<p>Yalnızca doğruluk değerine bakmak yanıltıcı olabilir. Özellikle nadir hastalıklarda precision, recall, F1 skoru ve karmaşıklık matrisi birlikte incelenmelidir. Yanlış negatif sonuç, hasta bitkinin sağlıklı ilan edilmesi anlamına geldiğinden tarımsal kullanımda çoğu zaman daha kritiktir.</p>

<p>Model farklı telefonlar, ışık koşulları, arka planlar ve bitki çeşitleri üzerinde de sınanmalıdır. Grad-CAM gibi açıklanabilirlik teknikleri, ağın gerçekten lekeye mi yoksa arka plandaki saksıya mı baktığını gösterir. Böylece proje yalnızca yüksek puan alan bir deney olmaktan çıkar, tarlada güvenilebilecek kullanışlı bir yardımcıya dönüşür.</p>

<p><img src="/img/derin-ogrenme-ile-50.svg" alt="derin-ogrenme-ile-50" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Proje" /><category term="derin öğrenme" /><category term="evrişimli sinir ağları" /><category term="görüntü işleme" /><category term="python" /><category term="pytorch" /><category term="tarım teknolojileri" /><summary type="html"><![CDATA[Bir yaprağın üzerindeki küçük kahverengi lekeler çiftçi için ciddi bir uyarı, evrişimli sinir ağı içinse sınıflandırılmayı bekleyen görsel örüntülerdir. Derin öğrenme sayesinde yaprak fotoğraflarını analiz ederek bitkinin sağlıklı olup olmadığını ve olası hastalık türünü otomatik biçimde tahmin edebiliriz. Böyle bir sistem, uzmanların yerini almak yerine erken tarama yapan dijital bir tarım asistanı gibi çalışır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/derin-ogrenme-ile-50.png" /><media:content medium="image" url="https://program.sonsuz.us/img/derin-ogrenme-ile-50.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">EKG Sinyal İşleme ve Aritmi Tespiti: Kalbin Dijital İzlerini Okumak</title><link href="https://program.sonsuz.us/posts/ekg-sinyal-isleme-ve-aritmi-tespiti-kalbin-dijital-izlerini-okumak/" rel="alternate" type="text/html" title="EKG Sinyal İşleme ve Aritmi Tespiti: Kalbin Dijital İzlerini Okumak" /><published>2026-10-25T00:00:00+00:00</published><updated>2026-10-25T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/ekg-sinyal-isleme-ve-aritmi-tespiti-kalbin-dijital-izlerini-okumak</id><content type="html" xml:base="https://program.sonsuz.us/posts/ekg-sinyal-isleme-ve-aritmi-tespiti-kalbin-dijital-izlerini-okumak/"><![CDATA[<p>Kalp, elektriksel darbelerle çalışan etkileyici bir pompa; EKG ise bu darbelerin zamana karşı çizilmiş hikâyesidir. Ne var ki ham EKG verisi, kas hareketleri, elektrot teması ve şebeke gürültüsü nedeniyle her zaman tertemiz görünmez. Sayısal sinyal işleme teknikleri bu karmaşayı temizleyerek kalp atımlarını bulmamızı, ritmi ölçmemizi ve olası aritmileri işaretlememizi sağlar.</p>

<p>``</p>

<h2 id="ekg-dalgası-bize-ne-anlatır">EKG dalgası bize ne anlatır?</h2>

<p>Tipik bir EKG çevrimi P dalgası, QRS kompleksi ve T dalgasından oluşur. P dalgası kulakçıkların, QRS kompleksi karıncıkların depolarizasyonunu; T dalgası ise karıncıkların toparlanmasını temsil eder. Aritmi tespitinde özellikle yüksek ve keskin <strong>R tepeleri</strong> önemlidir. Ardışık iki R tepesi arasındaki süreye RR aralığı denir.</p>

<p>RR aralığı saniye cinsindense yaklaşık kalp hızı şöyle hesaplanır:</p>

\[BPM = 60 / RR\]

<p>Örneğin RR aralığı $0.8$ saniye olduğunda kalp hızı $75$ BPM olur. Ancak yalnızca BPM yeterli değildir. Atımlar arasındaki düzensizlik, QRS genişliği ve beklenmeyen erken vuruşlar da incelenmelidir.</p>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>Normal beklenti</th>
      <th>Olası anormallik işareti</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Kalp hızı</td>
      <td>60–100 BPM</td>
      <td>Bradikardi veya taşikardi</td>
    </tr>
    <tr>
      <td>RR aralığı</td>
      <td>Görece düzenli</td>
      <td>Atriyal fibrilasyon gibi düzensizlikler</td>
    </tr>
    <tr>
      <td>QRS süresi</td>
      <td>Genellikle 120 ms’den kısa</td>
      <td>İletim bozukluğu veya ventriküler atım</td>
    </tr>
    <tr>
      <td>Erken vuruş</td>
      <td>Beklenmez</td>
      <td>Prematüre kasılma</td>
    </tr>
  </tbody>
</table>

<h2 id="önce-gürültüyü-susturalım">Önce gürültüyü susturalım</h2>

<p>Bir EKG sistemi, analog sinyali $f_s$ örnekleme frekansıyla sayısallaştırır. Nyquist ilkesine göre incelenmek istenen en yüksek frekans $f_{max}$ ise $f_s &gt; 2f_{max}$ olmalıdır. Uygulamada 250 Hz veya 500 Hz gibi hızlar sık kullanılır.</p>

<p>Ham sinyalde üç yaygın sorun bulunur: yavaş taban çizgisi kayması, yüksek frekanslı kas gürültüsü ve 50/60 Hz elektrik şebekesi paraziti. Bunlar sırasıyla yüksek geçiren, alçak geçiren ve çentik filtrelerle azaltılabilir.</p>

<table>
  <thead>
    <tr>
      <th>Filtre</th>
      <th>Bastırdığı bileşen</th>
      <th>EKG’deki amacı</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Yüksek geçiren</td>
      <td>Çok düşük frekanslar</td>
      <td>Taban çizgisi kaymasını giderme</td>
    </tr>
    <tr>
      <td>Alçak geçiren</td>
      <td>Yüksek frekanslar</td>
      <td>Kas ve ölçüm gürültüsünü azaltma</td>
    </tr>
    <tr>
      <td>Çentik</td>
      <td>Dar bir frekans bandı</td>
      <td>50/60 Hz şebeke parazitini bastırma</td>
    </tr>
    <tr>
      <td>Bant geçiren</td>
      <td>Belirli aralık dışı</td>
      <td>QRS kompleksini belirginleştirme</td>
    </tr>
  </tbody>
</table>

<p>Basit bir sonlu dürtü yanıtlı filtrenin çıkışı şu biçimdedir:</p>

\[y[n] = \sum_{k=0}^{M} b_k x[n-k]\]

<p>Burada $x[n]$ ham EKG’yi, $b_k$ filtre katsayılarını, $y[n]$ ise temizlenmiş sinyali temsil eder.</p>

<h2 id="python-ile-r-tepelerini-yakalamak">Python ile R tepelerini yakalamak</h2>

<p>Aşağıdaki örnek, EKG’yi bant geçiren filtreyle temizler ve R tepelerini bulur. <code class="language-plaintext highlighter-rouge">distance</code> parametresi, fizyolojik olarak imkânsız derecede yakın tepelerin seçilmesini önler.</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">filtfilt</span><span class="p">,</span> <span class="n">find_peaks</span>

<span class="n">fs</span> <span class="o">=</span> <span class="mi">250</span>  <span class="c1"># Örnekleme frekansı
</span>
<span class="k">def</span> <span class="nf">bandpass</span><span class="p">(</span><span class="n">ecg</span><span class="p">,</span> <span class="n">low</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">high</span><span class="o">=</span><span class="mi">20</span><span class="p">):</span>
    <span class="n">nyquist</span> <span class="o">=</span> <span class="n">fs</span> <span class="o">/</span> <span class="mi">2</span>
    <span class="n">b</span><span class="p">,</span> <span class="n">a</span> <span class="o">=</span> <span class="nf">butter</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="p">[</span><span class="n">low</span> <span class="o">/</span> <span class="n">nyquist</span><span class="p">,</span> <span class="n">high</span> <span class="o">/</span> <span class="n">nyquist</span><span class="p">],</span> <span class="n">btype</span><span class="o">=</span><span class="sh">'</span><span class="s">band</span><span class="sh">'</span><span class="p">)</span>
    <span class="k">return</span> <span class="nf">filtfilt</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="n">a</span><span class="p">,</span> <span class="n">ecg</span><span class="p">)</span>

<span class="n">filtered</span> <span class="o">=</span> <span class="nf">bandpass</span><span class="p">(</span><span class="n">ecg</span><span class="p">)</span>
<span class="n">threshold</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">mean</span><span class="p">(</span><span class="n">filtered</span><span class="p">)</span> <span class="o">+</span> <span class="mf">0.8</span> <span class="o">*</span> <span class="n">np</span><span class="p">.</span><span class="nf">std</span><span class="p">(</span><span class="n">filtered</span><span class="p">)</span>
<span class="n">peaks</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="nf">find_peaks</span><span class="p">(</span>
    <span class="n">filtered</span><span class="p">,</span>
    <span class="n">height</span><span class="o">=</span><span class="n">threshold</span><span class="p">,</span>
    <span class="n">distance</span><span class="o">=</span><span class="nf">int</span><span class="p">(</span><span class="mf">0.25</span> <span class="o">*</span> <span class="n">fs</span><span class="p">)</span>
<span class="p">)</span>

<span class="n">rr</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">diff</span><span class="p">(</span><span class="n">peaks</span><span class="p">)</span> <span class="o">/</span> <span class="n">fs</span>
<span class="n">bpm</span> <span class="o">=</span> <span class="mi">60</span> <span class="o">/</span> <span class="n">rr</span>
<span class="nf">print</span><span class="p">(</span><span class="sh">'</span><span class="s">Ortalama BPM:</span><span class="sh">'</span><span class="p">,</span> <span class="n">np</span><span class="p">.</span><span class="nf">mean</span><span class="p">(</span><span class="n">bpm</span><span class="p">))</span>
</code></pre></div></div>

<p>Bu yaklaşım öğretici olsa da gerçek verilerde ters QRS kompleksleri veya hareket artefaktları nedeniyle uyarlanabilir eşikler gerekebilir. Pan–Tompkins algoritması; bant geçiren filtreleme, türev alma, karesini hesaplama ve hareketli pencere integrasyonu adımlarını birleştirerek daha dayanıklı R tepesi tespiti sunar.</p>

<h2 id="aritmi-kararı-nasıl-verilir">Aritmi kararı nasıl verilir?</h2>

<p>Kural tabanlı sistem, BPM ve RR değişkenliğine eşikler uygulayabilir. Daha gelişmiş sistemlerde RR istatistikleri, QRS süresi, dalga morfolojisi ve frekans özellikleri bir özellik vektörüne dönüştürülür. Ardından SVM, rastgele orman veya sinir ağı kullanılarak normal ritim ile aritmi sınıflandırılır.</p>

<p>Yine de algoritmanın verdiği sonuç tıbbi tanı değildir. Model; farklı yaş grupları, cihazlar ve hasta kayıtları üzerinde doğrulanmalı, duyarlılık ve özgüllük birlikte değerlendirilmelidir. Kısacası bilgisayar kalbin ritmini dikkatle dinler, fakat son sözü klinik uzmanlık söyler.</p>

<p><img src="/img/ekg-sinyal-isleme-60.svg" alt="ekg-sinyal-isleme-60" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="ekg" /><category term="sinyal işleme" /><category term="aritmi" /><category term="python" /><category term="biyomedikal" /><category term="makine öğrenmesi" /><summary type="html"><![CDATA[Kalp, elektriksel darbelerle çalışan etkileyici bir pompa; EKG ise bu darbelerin zamana karşı çizilmiş hikâyesidir. Ne var ki ham EKG verisi, kas hareketleri, elektrot teması ve şebeke gürültüsü nedeniyle her zaman tertemiz görünmez. Sayısal sinyal işleme teknikleri bu karmaşayı temizleyerek kalp atımlarını bulmamızı, ritmi ölçmemizi ve olası aritmileri işaretlememizi sağlar.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/ekg-sinyal-isleme-60.png" /><media:content medium="image" url="https://program.sonsuz.us/img/ekg-sinyal-isleme-60.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Oyunlarda Kayıp Aversiyonu: Kaybetme Korkusu Oyuncuyu Nasıl Etkiler?</title><link href="https://program.sonsuz.us/posts/oyunlarda-kayip-aversiyonu-kaybetme-korkusu-oyuncuyu-nasil-etkiler/" rel="alternate" type="text/html" title="Oyunlarda Kayıp Aversiyonu: Kaybetme Korkusu Oyuncuyu Nasıl Etkiler?" /><published>2026-10-25T00:00:00+00:00</published><updated>2026-10-25T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/oyunlarda-kayip-aversiyonu-kaybetme-korkusu-oyuncuyu-nasil-etkiler</id><content type="html" xml:base="https://program.sonsuz.us/posts/oyunlarda-kayip-aversiyonu-kaybetme-korkusu-oyuncuyu-nasil-etkiler/"><![CDATA[<p><img src="/img/oyunlarda-kayip-aversiyonu-16.svg" alt="oyunlarda-kayip-aversiyonu-16" /></p>

<p>Bir oyunda kazandığınız 100 altın sizi mutlu ederken aynı miktarı kaybetmek neden çok daha ağır hissettirir? Cevap, davranışsal ekonominin en güçlü kavramlarından biri olan <strong>kayıp aversiyonunda</strong> saklıdır. Oyun tasarımcıları bu psikolojik eğilimi görevlerden günlük ödüllere kadar pek çok sistemde kullanır. Ancak oyuncuyu motive etmek ile onu kaybetme korkusuyla baskı altında tutmak arasında dikkatle korunması gereken etik bir sınır vardır.
``</p>

<h2 id="kayıp-aversiyonu-nedir">Kayıp aversiyonu nedir?</h2>

<p>Kayıp aversiyonu, insanların kayıplara eşit büyüklükteki kazançlardan daha güçlü tepki vermesidir. Örneğin 50 TL bulmanın yarattığı sevinç, 50 TL kaybetmenin oluşturduğu üzüntüyü genellikle dengelemez. Daniel Kahneman ve Amos Tversky tarafından geliştirilen <strong>Beklenti Teorisi</strong>, kararlarımızın mutlak sonuçlardan çok mevcut referans noktasına göre şekillendiğini söyler.</p>

<p>Bu düşünce basitleştirilmiş bir değer fonksiyonuyla gösterilebilir:</p>

\[v(x)=
\begin{cases}
x^\alpha, &amp; x \geq 0 \\
-\lambda(-x)^\beta, &amp; x &lt; 0
\end{cases}\]

<p>Burada $x$ kazanç veya kaybı, $\alpha$ ve $\beta$ duyarlılığı, $\lambda$ ise kayıpların psikolojik ağırlığını temsil eder. Çoğu modelde $\lambda &gt; 1$ kabul edilir. Örneğin $\lambda=2$ olduğunda 100 puanlık kayıp, yaklaşık 200 puanlık psikolojik etki yaratabilir.</p>

<table>
  <thead>
    <tr>
      <th>Durum</th>
      <th>Oyuncunun algısı</th>
      <th>Muhtemel davranış</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Yeni bir ödül kazanmak</td>
      <td>Olumlu fırsat</td>
      <td>Oynamaya istek duyma</td>
    </tr>
    <tr>
      <td>Mevcut seriyi kaybetmek</td>
      <td>Sahip olunan değerin silinmesi</td>
      <td>Bir maç daha oynama</td>
    </tr>
    <tr>
      <td>Süreli ödülü kaçırmak</td>
      <td>Geri gelmeyecek kayıp</td>
      <td>Oyuna hızlıca dönme</td>
    </tr>
    <tr>
      <td>Rütbenin düşmesi</td>
      <td>Statü ve ilerleme kaybı</td>
      <td>Kaybı telafi etmeye çalışma</td>
    </tr>
  </tbody>
</table>

<h2 id="oyunlarda-nasıl-karşımıza-çıkar">Oyunlarda nasıl karşımıza çıkar?</h2>

<p><strong>Galibiyet serileri</strong>, kayıp aversiyonunun en görünür örneklerindendir. Oyuncu üç maç kazandığında sadece yeni bir ödüle yaklaşmaz; aynı zamanda oluşturduğu serinin sahibi gibi hissetmeye başlar. Sonraki maça girmesinin nedeni ödül kazanmak kadar seriyi kaybetmemektir.</p>

<p><strong>Günlük giriş serileri</strong> de benzer çalışır. Yirmi gün boyunca oyuna giren biri, yirmi birinci günün ödülünden çok önceki yirmi günün boşa gitmesinden endişe edebilir. Süreli etkinlikler, sezon biletleri, düşebilen lig puanları ve kaybolabilen kaynaklar da aynı psikolojik düğmeye basar.</p>

<table>
  <thead>
    <tr>
      <th>Dengeli tasarım</th>
      <th>Baskıcı tasarım</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Kaçırılan gün için telafi hakkı verir</td>
      <td>Tüm seriyi anında sıfırlar</td>
    </tr>
    <tr>
      <td>Kaybın sonucunu önceden açıklar</td>
      <td>Sonucu belirsiz veya gizli tutar</td>
    </tr>
    <tr>
      <td>Oyuncuya mola seçeneği sunar</td>
      <td>Sürekli bildirimlerle aciliyet yaratır</td>
    </tr>
    <tr>
      <td>Eğlenceyi temel motivasyon yapar</td>
      <td>Kaygıyı temel motivasyona dönüştürür</td>
    </tr>
  </tbody>
</table>

<h2 id="basit-bir-mekanik-örneği">Basit bir mekanik örneği</h2>

<p>Aşağıdaki JavaScript fonksiyonu, galibiyet serisinin tamamen silinmesi yerine bir miktar korunmasını sağlar. Böylece kayıp hâlâ anlamlıdır fakat oyuncunun emeği bütünüyle yok olmaz:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nf">updateStreak</span><span class="p">(</span><span class="nx">currentStreak</span><span class="p">,</span> <span class="nx">didWin</span><span class="p">,</span> <span class="nx">shieldCount</span><span class="p">)</span> <span class="p">{</span>
  <span class="k">if </span><span class="p">(</span><span class="nx">didWin</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">return</span> <span class="p">{</span>
      <span class="na">streak</span><span class="p">:</span> <span class="nx">currentStreak</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span>
      <span class="na">shields</span><span class="p">:</span> <span class="nx">shieldCount</span>
    <span class="p">};</span>
  <span class="p">}</span>

  <span class="k">if </span><span class="p">(</span><span class="nx">shieldCount</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">return</span> <span class="p">{</span>
      <span class="na">streak</span><span class="p">:</span> <span class="nx">currentStreak</span><span class="p">,</span>
      <span class="na">shields</span><span class="p">:</span> <span class="nx">shieldCount</span> <span class="o">-</span> <span class="mi">1</span>
    <span class="p">};</span>
  <span class="p">}</span>

  <span class="k">return</span> <span class="p">{</span>
    <span class="na">streak</span><span class="p">:</span> <span class="nb">Math</span><span class="p">.</span><span class="nf">floor</span><span class="p">(</span><span class="nx">currentStreak</span> <span class="o">/</span> <span class="mi">2</span><span class="p">),</span>
    <span class="na">shields</span><span class="p">:</span> <span class="mi">0</span>
  <span class="p">};</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Buradaki <strong>koruma kalkanı</strong>, kaybı tamamen kaldırmaz; yalnızca sertliğini azaltır. Kalkan yoksa seri yarıya iner. Bu yaklaşım, oyuncuya başarısızlığın bir sonucu olduğunu hissettirirken uzun süreli emeği de korur.</p>

<h2 id="etik-tasarım-neden-önemli">Etik tasarım neden önemli?</h2>

<p>Kayıp aversiyonu tek başına kötü bir mekanik değildir. Gerilim oluşturabilir, kararları anlamlı hâle getirebilir ve oyuncunun başarılarına değer katabilir. Sorun, sistemin eğlence yerine suçluluk, stres veya kaçırma korkusu üretmeye başlamasıdır.</p>

<p>İyi bir tasarımcı şu soruyu sormalıdır: <strong>Oyuncu devam etmek istediği için mi oynuyor, yoksa bırakırsa cezalandırılacağını düşündüğü için mi?</strong> Şeffaf kurallar, makul telafi seçenekleri, bildirim kontrolleri ve mola hakları bu ayrımı belirler. En başarılı oyun döngüsü, oyuncuyu korkuyla ekrana zincirleyen değil; kayıpları öğretici, adil ve geri dönülebilir deneyimlere dönüştüren döngüdür.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="oyun tasarımı" /><category term="kayıp aversiyonu" /><category term="oyuncu psikolojisi" /><category term="davranışsal ekonomi" /><category term="game design" /><summary type="html"><![CDATA[Bir oyunda kazandığınız 100 altın sizi mutlu ederken aynı miktarı kaybetmek neden çok daha ağır hissettirir? Cevap, davranışsal ekonominin en güçlü kavramlarından biri olan kayıp aversiyonunda saklıdır. Oyun tasarımcıları bu psikolojik eğilimi görevlerden günlük ödüllere kadar pek çok sistemde kullanır. Ancak oyuncuyu motive etmek ile onu kaybetme korkusuyla baskı altında tutmak arasında dikkatle korunması gereken etik bir sınır vardır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/oyunlarda-kayip-aversiyonu-16.png" /><media:content medium="image" url="https://program.sonsuz.us/img/oyunlarda-kayip-aversiyonu-16.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Robotik Algılamada LIDAR mı Kamera mı? Doğruluk ve Maliyet Karşılaştırması</title><link href="https://program.sonsuz.us/posts/robotik-algilamada-lidar-mi-kamera-mi-dogruluk-ve-maliyet-karsilastirmasi/" rel="alternate" type="text/html" title="Robotik Algılamada LIDAR mı Kamera mı? Doğruluk ve Maliyet Karşılaştırması" /><published>2026-10-25T00:00:00+00:00</published><updated>2026-10-25T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/robotik-algilamada-lidar-mi-kamera-mi-dogruluk-ve-maliyet-karsilastirmasi</id><content type="html" xml:base="https://program.sonsuz.us/posts/robotik-algilamada-lidar-mi-kamera-mi-dogruluk-ve-maliyet-karsilastirmasi/"><![CDATA[<p>Bir robotun çevresini anlaması, yalnızca önündeki nesneleri “görmesinden” ibaret değildir. Robot; nesnenin uzaklığını, biçimini, hareketini ve mümkünse ne olduğunu belirlemelidir. Bu noktada iki popüler seçenek karşımıza çıkar: lazer darbeleriyle mesafe ölçen LIDAR ve görüntülerden anlam çıkaran kamera. Peki hangisi daha doğru, hangisi daha ekonomik?
``</p>

<h2 id="algılama-yöntemleri-nasıl-çalışır">Algılama yöntemleri nasıl çalışır?</h2>

<p>LIDAR, çevreye lazer darbeleri gönderir ve ışığın geri dönme süresini ölçerek uzaklığı hesaplar. Temel ilişki şöyledir:</p>

\[d = c t / 2\]

<p>Burada $d$ mesafe, $c$ ışık hızı ve $t$ darbenin gidiş-dönüş süresidir. İkiye bölmemizin nedeni, ölçülen sürenin ışığın hem nesneye gidişini hem de sensöre dönüşünü kapsamasıdır. Binlerce ölçüm birleştirildiğinde çevrenin üç boyutlu “nokta bulutu” oluşur.</p>

<p>Kamera ise sahneyi piksel matrisi olarak kaydeder. Derinlik doğrudan ölçülmez; stereo kamera, hareket analizi veya yapay sinir ağlarıyla tahmin edilir. Stereo sistemlerde yaklaşık derinlik bağıntısı şöyledir:</p>

\[Z = fB / p\]

<p>Burada $Z$ derinlik, $f$ odak uzaklığı, $B$ iki kamera arasındaki mesafe ve $p$ aynı noktanın görüntülerdeki konum farkıdır. Konum farkındaki küçük hatalar, özellikle uzaktaki nesnelerde büyük derinlik hatalarına dönüşebilir.</p>

<h2 id="doğruluk-karşılaştırması">Doğruluk karşılaştırması</h2>

<table>
  <thead>
    <tr>
      <th>Özellik</th>
      <th>LIDAR</th>
      <th>Kamera</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Mesafe ölçümü</td>
      <td>Doğrudan ve yüksek doğrulukta</td>
      <td>Tahmine veya stereo geometrisine bağlı</td>
    </tr>
    <tr>
      <td>Renk ve doku</td>
      <td>Çok sınırlı</td>
      <td>Oldukça zengin</td>
    </tr>
    <tr>
      <td>Gece performansı</td>
      <td>Genellikle güçlü</td>
      <td>Ek aydınlatma yoksa zayıflayabilir</td>
    </tr>
    <tr>
      <td>Sis, yağmur, kar</td>
      <td>Ölçümler bozulabilir</td>
      <td>Görüş ciddi biçimde azalabilir</td>
    </tr>
    <tr>
      <td>Nesne sınıflandırma</td>
      <td>Tek başına sınırlı</td>
      <td>Derin öğrenmeyle başarılı</td>
    </tr>
    <tr>
      <td>3B haritalama</td>
      <td>Doğal olarak uygun</td>
      <td>Ek hesaplama gerektirir</td>
    </tr>
  </tbody>
</table>

<p>LIDAR, SLAM ve engelden kaçınma gibi geometrinin kritik olduğu görevlerde avantajlıdır. Kamera ise trafik levhası okumak, insan tanımak veya nesnenin rengini ayırt etmek gibi anlamsal görevlerde öne çıkar. Kısacası LIDAR “Nerede?”, kamera ise “Ne?” sorusuna daha rahat cevap verir.</p>

<h2 id="maliyet-yalnızca-sensör-fiyatı-değildir">Maliyet yalnızca sensör fiyatı değildir</h2>

<p>Kameralar genellikle daha ucuz, küçük ve kolay erişilebilirdir. Ancak yüksek çözünürlüklü görüntülerin gerçek zamanlı işlenmesi için güçlü GPU, daha fazla bellek ve karmaşık yapay zekâ modelleri gerekebilir. Bu nedenle toplam maliyet şu şekilde düşünülmelidir:</p>

\[M_{toplam} = M_{sensör} + M_{işlem} + M_{geliştirme} + M_{bakım}\]

<p>LIDAR’ın satın alma fiyatı daha yüksek olabilir; buna karşılık hazır 3B ölçüm sağlaması bazı algoritmaları basitleştirir. Mekanik döner modeller bakım gerektirebilirken katı hâl LIDAR’lar daha dayanıklıdır. Kamera lenslerinin kirlenmesi, ışık değişimleri ve modelin yeniden eğitilmesi de görünmeyen maliyetlerdir.</p>

<h2 id="basit-bir-seçim-puanlaması">Basit bir seçim puanlaması</h2>

<p>Aşağıdaki Python kodu, projedeki önceliklere göre iki sensörü kabaca puanlar:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">weights</span> <span class="o">=</span> <span class="p">{</span>
    <span class="sh">"</span><span class="s">distance_accuracy</span><span class="sh">"</span><span class="p">:</span> <span class="mf">0.40</span><span class="p">,</span>
    <span class="sh">"</span><span class="s">semantic_detail</span><span class="sh">"</span><span class="p">:</span> <span class="mf">0.25</span><span class="p">,</span>
    <span class="sh">"</span><span class="s">low_cost</span><span class="sh">"</span><span class="p">:</span> <span class="mf">0.35</span><span class="p">,</span>
<span class="p">}</span>

<span class="n">scores</span> <span class="o">=</span> <span class="p">{</span>
    <span class="sh">"</span><span class="s">lidar</span><span class="sh">"</span><span class="p">:</span>  <span class="p">{</span><span class="sh">"</span><span class="s">distance_accuracy</span><span class="sh">"</span><span class="p">:</span> <span class="mi">9</span><span class="p">,</span> <span class="sh">"</span><span class="s">semantic_detail</span><span class="sh">"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> <span class="sh">"</span><span class="s">low_cost</span><span class="sh">"</span><span class="p">:</span> <span class="mi">4</span><span class="p">},</span>
    <span class="sh">"</span><span class="s">camera</span><span class="sh">"</span><span class="p">:</span> <span class="p">{</span><span class="sh">"</span><span class="s">distance_accuracy</span><span class="sh">"</span><span class="p">:</span> <span class="mi">6</span><span class="p">,</span> <span class="sh">"</span><span class="s">semantic_detail</span><span class="sh">"</span><span class="p">:</span> <span class="mi">9</span><span class="p">,</span> <span class="sh">"</span><span class="s">low_cost</span><span class="sh">"</span><span class="p">:</span> <span class="mi">9</span><span class="p">},</span>
<span class="p">}</span>

<span class="k">for</span> <span class="n">sensor</span><span class="p">,</span> <span class="n">criteria</span> <span class="ow">in</span> <span class="n">scores</span><span class="p">.</span><span class="nf">items</span><span class="p">():</span>
    <span class="n">total</span> <span class="o">=</span> <span class="nf">sum</span><span class="p">(</span><span class="n">criteria</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">*</span> <span class="n">weights</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">weights</span><span class="p">)</span>
    <span class="nf">print</span><span class="p">(</span><span class="n">sensor</span><span class="p">,</span> <span class="nf">round</span><span class="p">(</span><span class="n">total</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span>
</code></pre></div></div>

<p>Kod, her ölçütün önem katsayısını sensör puanıyla çarpar. Gerçek projede enerji tüketimi, görüş alanı ve hava koşulları gibi yeni ölçütler eklenebilir. Bu yaklaşım kesin karar vermez; ekip içindeki “Bence kamera daha havalı!” tartışmasını ölçülebilir hâle getirir.</p>

<h2 id="sonuç-rakip-değil-takım-arkadaşı">Sonuç: Rakip değil, takım arkadaşı</h2>

<p>Düşük bütçeli iç mekân robotlarında kamera çoğu zaman yeterlidir. Hassas haritalama, otonom sürüş veya güvenlik kritik uygulamalarda LIDAR daha güvenilir geometrik veri sunar. En güçlü çözüm ise sensör füzyonudur: LIDAR’ın mesafe doğruluğu, kameranın renk ve anlam bilgisiyle birleştirilir. Bütçe izin veriyorsa doğru soru “Hangisini seçmeliyim?” değil, “Bu ikisini nasıl konuşturmalıyım?” olabilir.</p>

<p><img src="/img/robotik-algilamada-lidar-35.svg" alt="robotik-algilamada-lidar-35" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="robotik" /><category term="lidar" /><category term="kamera" /><category term="algılama" /><category term="bilgisayarlı görü" /><category term="sensör füzyonu" /><summary type="html"><![CDATA[Bir robotun çevresini anlaması, yalnızca önündeki nesneleri “görmesinden” ibaret değildir. Robot; nesnenin uzaklığını, biçimini, hareketini ve mümkünse ne olduğunu belirlemelidir. Bu noktada iki popüler seçenek karşımıza çıkar: lazer darbeleriyle mesafe ölçen LIDAR ve görüntülerden anlam çıkaran kamera. Peki hangisi daha doğru, hangisi daha ekonomik?]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/robotik-algilamada-lidar-35.png" /><media:content medium="image" url="https://program.sonsuz.us/img/robotik-algilamada-lidar-35.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Roket Motorlarında Telemetri: Binlerce Sensörden Gerçek Zamanlı Karara</title><link href="https://program.sonsuz.us/posts/roket-motorlarinda-telemetri-binlerce-sensorden-gercek-zamanli-karara/" rel="alternate" type="text/html" title="Roket Motorlarında Telemetri: Binlerce Sensörden Gerçek Zamanlı Karara" /><published>2026-10-25T00:00:00+00:00</published><updated>2026-10-25T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/roket-motorlarinda-telemetri-binlerce-sensorden-gercek-zamanli-karara</id><content type="html" xml:base="https://program.sonsuz.us/posts/roket-motorlarinda-telemetri-binlerce-sensorden-gercek-zamanli-karara/"><![CDATA[<p><img src="/img/roket-motorlarinda-telemetri-54.svg" alt="roket-motorlarinda-telemetri-54" /></p>

<p>Bir roket motoru ateşlendiğinde yalnızca yakıt yanmaz; aynı anda devasa bir veri nehri akmaya başlar. Basınç, sıcaklık, titreşim, yakıt debisi ve valf konumu gibi binlerce ölçüm, saniyenin küçük dilimlerinde kontrol bilgisayarlarına ulaşır. Telemetri sistemi bu gürültülü akışı anlamlı bilgilere dönüştürerek mühendislerin motorun sağlığını izlemesini ve kritik durumları erkenden fark etmesini sağlar.</p>

<p>``</p>

<h2 id="sensörden-başlayan-yolculuk">Sensörden başlayan yolculuk</h2>

<p>Bir ölçüm zinciri sensörle başlar. Termokupl sıcaklığı, piezoelektrik sensör titreşimi, basınç dönüştürücü ise yanma odası basıncını elektrik sinyaline çevirir. Bu analog sinyaller önce yükseltilir ve filtrelenir, ardından ADC kullanılarak sayısallaştırılır.</p>

<p>Örnekleme hızı rastgele seçilemez. Nyquist ilkesine göre ölçülmek istenen en yüksek frekans $f_{max}$ ise örnekleme frekansı şu koşulu sağlamalıdır:</p>

\[f_s &gt; 2f_{max}\]

<p>Örneğin 5 kHz seviyesindeki titreşimleri gözlemlemek için teorik olarak 10 kHz’den yüksek bir hız gerekir. Pratikte filtreleme ve güvenlik payı nedeniyle daha yüksek değerler seçilir. Sıcaklık gibi yavaş değişen veriler ise saniyede birkaç örnekle izlenebilir. Her sensörü aynı hızda okumak, veri hattını gereksiz yere şişirir.</p>

<table>
  <thead>
    <tr>
      <th>Ölçüm türü</th>
      <th style="text-align: right">Tipik örnekleme yaklaşımı</th>
      <th>İzlenen durum</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Sıcaklık</td>
      <td style="text-align: right">Düşük hız</td>
      <td>Aşırı ısınma</td>
    </tr>
    <tr>
      <td>Oda basıncı</td>
      <td style="text-align: right">Orta-yüksek hız</td>
      <td>Yanma kararlılığı</td>
    </tr>
    <tr>
      <td>Titreşim</td>
      <td style="text-align: right">Çok yüksek hız</td>
      <td>Rezonans ve mekanik hasar</td>
    </tr>
    <tr>
      <td>Valf konumu</td>
      <td style="text-align: right">Orta hız</td>
      <td>Komut-tepki uyumu</td>
    </tr>
    <tr>
      <td>Yakıt debisi</td>
      <td style="text-align: right">Orta hız</td>
      <td>Karışım oranı</td>
    </tr>
  </tbody>
</table>

<h2 id="gerçek-zamanlı-veri-hattı">Gerçek zamanlı veri hattı</h2>

<p>Ham ölçümler çoğunlukla sensör düğümlerinde zaman damgası alır. Paketler CAN, Ethernet veya uzay sistemlerine özel dayanıklı haberleşme protokolleri üzerinden uçuş bilgisayarına taşınır. Burada temel işlem sırası şöyledir:</p>

<ol>
  <li>Paket bütünlüğü ve sıra numarası kontrol edilir.</li>
  <li>Ölçümler ortak bir zaman ekseninde hizalanır.</li>
  <li>Kalibrasyon katsayıları uygulanır.</li>
  <li>Gürültü filtrelenir ve özellikler çıkarılır.</li>
  <li>Eşik ya da model tabanlı sağlık kontrolleri çalıştırılır.</li>
  <li>Özet veriler yer istasyonuna gönderilirken ham veriler kaydedilir.</li>
</ol>

<p>Binlerce kanalın toplam veri hızı yaklaşık olarak</p>

\[R = N \times f_s \times b\]

<p>ile hesaplanabilir. Burada $N$ sensör sayısı, $f_s$ örnekleme hızı, $b$ ise örnek başına bit miktarıdır. 2.000 sensörün 1 kHz’de ve 16 bit çözünürlükte okunması, protokol yükleri hariç 32 Mbit/s üretir. Bu nedenle sıkıştırma, önceliklendirme ve uçta işleme hayati önem taşır.</p>

<h2 id="gürültü-mü-arıza-mı">Gürültü mü, arıza mı?</h2>

<p>Tek bir yüksek değer her zaman motorun sorun yaşadığı anlamına gelmez. Elektriksel parazit veya sensör temassızlığı da ani sıçrama oluşturabilir. Basit bir hareketli ortalama, kısa süreli gürültüyü azaltabilir:</p>

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

<span class="n">pencere</span> <span class="o">=</span> <span class="nf">deque</span><span class="p">(</span><span class="n">maxlen</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">filtrele</span><span class="p">(</span><span class="n">olcum</span><span class="p">):</span>
    <span class="n">pencere</span><span class="p">.</span><span class="nf">append</span><span class="p">(</span><span class="n">olcum</span><span class="p">)</span>
    <span class="k">return</span> <span class="nf">sum</span><span class="p">(</span><span class="n">pencere</span><span class="p">)</span> <span class="o">/</span> <span class="nf">len</span><span class="p">(</span><span class="n">pencere</span><span class="p">)</span>
</code></pre></div></div>

<p>Bu kod son beş ölçümün ortalamasını üretir. Ancak hızlı basınç değişimlerini geciktirebileceği için güvenlik kararlarında tek başına kullanılmamalıdır. Gerçek sistemlerde Kalman filtreleri, bant geçiren filtreler ve sensör füzyonu gibi yöntemler tercih edilir.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Avantaj</th>
      <th>Risk</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Sabit eşik</td>
      <td>Hızlı ve anlaşılır</td>
      <td>Değişen koşullara uyumsuz olabilir</td>
    </tr>
    <tr>
      <td>İstatistiksel model</td>
      <td>Sapmaları yakalar</td>
      <td>Geçmiş veriye ihtiyaç duyar</td>
    </tr>
    <tr>
      <td>Makine öğrenmesi</td>
      <td>Karmaşık ilişkileri bulur</td>
      <td>Açıklanabilirlik ve doğrulama zordur</td>
    </tr>
    <tr>
      <td>Sensör füzyonu</td>
      <td>Yanlış alarmı azaltır</td>
      <td>Hesaplama maliyeti yüksektir</td>
    </tr>
  </tbody>
</table>

<h2 id="milisaniyeler-içinde-karar">Milisaniyeler içinde karar</h2>

<p>Roket telemetrisi yalnızca grafik çizmek değildir. Kritik basınç artışı algılandığında kontrol sistemi valfleri ayarlayabilir veya güvenli kapatma sürecini başlatabilir. Bu nedenle yazılımın gecikmesi öngörülebilir olmalı; bellek tahsisi, görev öncelikleri ve hata yönetimi titizlikle tasarlanmalıdır.</p>

<p>Fırlatma sonrasında kaydedilen ham veriler dijital ikizlerle karşılaştırılır. Böylece küçük titreşim değişimleri, verim kayıpları ve sensör sapmaları bulunur. Kısacası telemetri, roket motorunun nabzını ölçen bir stetoskop; gerçek zamanlı analiz ise bu nabzın ne anlattığını milisaniyeler içinde yorumlayan doktordur.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="telemetri" /><category term="roket" /><category term="sensör" /><category term="veri-analizi" /><category term="gerçek-zamanlı-sistemler" /><category term="python" /><summary type="html"><![CDATA[Bir roket motoru ateşlendiğinde yalnızca yakıt yanmaz; aynı anda devasa bir veri nehri akmaya başlar. Basınç, sıcaklık, titreşim, yakıt debisi ve valf konumu gibi binlerce ölçüm, saniyenin küçük dilimlerinde kontrol bilgisayarlarına ulaşır. Telemetri sistemi bu gürültülü akışı anlamlı bilgilere dönüştürerek mühendislerin motorun sağlığını izlemesini ve kritik durumları erkenden fark etmesini sağlar.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/roket-motorlarinda-telemetri-54.png" /><media:content medium="image" url="https://program.sonsuz.us/img/roket-motorlarinda-telemetri-54.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Salgının Matematiği: SIR Modeliyle Hastalık Yayılımını Tahmin Etmek</title><link href="https://program.sonsuz.us/posts/salginin-matematigi-sir-modeliyle-hastalik-yayilimini-tahmin-etmek/" rel="alternate" type="text/html" title="Salgının Matematiği: SIR Modeliyle Hastalık Yayılımını Tahmin Etmek" /><published>2026-10-25T00:00:00+00:00</published><updated>2026-10-25T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/salginin-matematigi-sir-modeliyle-hastalik-yayilimini-tahmin-etmek</id><content type="html" xml:base="https://program.sonsuz.us/posts/salginin-matematigi-sir-modeliyle-hastalik-yayilimini-tahmin-etmek/"><![CDATA[<p>Bir salgının geleceğini tahmin etmek, kristal küreye bakmaktan çok daha sistematik bir iştir. Matematiksel modeller; bulaşma hızı, iyileşme süresi ve duyarlı nüfus gibi değişkenleri kullanarak vaka sayılarının zaman içinde nasıl değişebileceğini gösterir. Bu modellerin en tanınmış örneklerinden biri olan SIR, karmaşık bir toplumsal olayı üç temel nüfus grubuyla açıklamaya çalışır.</p>

<p>``</p>

<h2 id="sir-modeli-nedir">SIR modeli nedir?</h2>

<p>SIR adı, modeldeki üç grubun İngilizce adlarının baş harflerinden gelir:</p>

<ul>
  <li><strong>S — Susceptible:</strong> Hastalığa yakalanabilecek duyarlı kişiler.</li>
  <li><strong>I — Infectious:</strong> Hastalığı taşıyan ve başkalarına bulaştırabilen kişiler.</li>
  <li><strong>R — Recovered:</strong> İyileşen, bağışıklık kazanan veya bulaştırıcılığı sona eren kişiler.</li>
</ul>

<p>Kapalı bir toplumda toplam nüfusun sabit olduğu varsayılır:</p>

\[N = S(t) + I(t) + R(t)\]

<p>Buradaki $t$ zamanı, $N$ ise toplam nüfusu temsil eder. Model; doğum, göç ve doğal ölüm gibi değişimleri genellikle hesaba katmaz. Başka bir deyişle matematik, işe önce masayı sadeleştirerek başlar.</p>

<table>
  <thead>
    <tr>
      <th>Grup</th>
      <th>Sisteme giriş nedeni</th>
      <th>Sistemden çıkış nedeni</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Duyarlı $S$</td>
      <td>Başlangıç nüfusu</td>
      <td>Enfekte olmak</td>
    </tr>
    <tr>
      <td>Enfekte $I$</td>
      <td>Bulaşıcı kişiyle temas</td>
      <td>İyileşmek veya bulaştırıcılığı kaybetmek</td>
    </tr>
    <tr>
      <td>İyileşen $R$</td>
      <td>Hastalığı atlatmak</td>
      <td>Temel SIR modelinde çıkış yoktur</td>
    </tr>
  </tbody>
</table>

<h2 id="modelin-matematiksel-motoru">Modelin matematiksel motoru</h2>

<p>SIR modeli üç diferansiyel denklemle çalışır:</p>

\[dS/dt = -βSI/N\]

\[dI/dt = βSI/N - γI\]

\[dR/dt = γI\]

<p>Burada $β$, hastalığın etkili temas yoluyla bulaşma hızını; $γ$ ise iyileşme hızını ifade eder. Ortalama bulaşıcı kalma süresi $D$ günse yaklaşık olarak $γ = 1/D$ kabul edilir.</p>

<p>İlk denklem, duyarlı kişilerin enfekte oldukça azaldığını söyler. İkinci denklemde enfekte grubuna yeni vakalar eklenirken iyileşenler çıkarılır. Son denklem ise iyileşen grubunun hangi hızla büyüdüğünü gösterir. Böylece model, nüfusu bölmeler arasında akan bir sıvı gibi ele alır.</p>

<p>Salgının büyüyüp büyümeyeceğini anlamak için temel üreme sayısı kullanılır:</p>

\[R_0 = β/γ\]

<table>
  <thead>
    <tr>
      <th>$R_0$ değeri</th>
      <th>Beklenen davranış</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>$R_0 &lt; 1$</td>
      <td>Salgın zamanla küçülür</td>
    </tr>
    <tr>
      <td>$R_0 = 1$</td>
      <td>Vaka sayısı yaklaşık sabit kalır</td>
    </tr>
    <tr>
      <td>$R_0 &gt; 1$</td>
      <td>Salgın başlangıçta büyür</td>
    </tr>
  </tbody>
</table>

<p>Örneğin $β = 0.30$ ve $γ = 0.10$ ise $R_0 = 3$ olur. Bu, tamamen duyarlı bir toplumda her enfekte kişinin ortalama üç yeni enfeksiyon oluşturabileceği anlamına gelir. Ancak duyarlı nüfus azaldıkça etkili üreme sayısı da düşer:</p>

\[R_t = R_0 S(t)/N\]

<h2 id="python-ile-basit-bir-simülasyon">Python ile basit bir simülasyon</h2>

<p>Aşağıdaki kod, denklemleri küçük zaman adımlarıyla yaklaşık olarak çözer. Euler yöntemi kullanılan bu yaklaşım eğitim için yeterlidir; ciddi epidemiyolojik analizlerde daha gelişmiş çözücüler tercih edilir.</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">import</span> <span class="n">matplotlib.pyplot</span> <span class="k">as</span> <span class="n">plt</span>

<span class="n">N</span> <span class="o">=</span> <span class="mi">100_000</span>
<span class="n">beta</span> <span class="o">=</span> <span class="mf">0.30</span>
<span class="n">gamma</span> <span class="o">=</span> <span class="mf">0.10</span>
<span class="n">days</span> <span class="o">=</span> <span class="mi">160</span>

<span class="n">S</span><span class="p">,</span> <span class="n">I</span><span class="p">,</span> <span class="n">R</span> <span class="o">=</span> <span class="n">np</span><span class="p">.</span><span class="nf">zeros</span><span class="p">(</span><span class="n">days</span><span class="p">),</span> <span class="n">np</span><span class="p">.</span><span class="nf">zeros</span><span class="p">(</span><span class="n">days</span><span class="p">),</span> <span class="n">np</span><span class="p">.</span><span class="nf">zeros</span><span class="p">(</span><span class="n">days</span><span class="p">)</span>
<span class="n">S</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">I</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">R</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">N</span> <span class="o">-</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">0</span>

<span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="nf">range</span><span class="p">(</span><span class="n">days</span> <span class="o">-</span> <span class="mi">1</span><span class="p">):</span>
    <span class="n">new_infections</span> <span class="o">=</span> <span class="n">beta</span> <span class="o">*</span> <span class="n">S</span><span class="p">[</span><span class="n">t</span><span class="p">]</span> <span class="o">*</span> <span class="n">I</span><span class="p">[</span><span class="n">t</span><span class="p">]</span> <span class="o">/</span> <span class="n">N</span>
    <span class="n">new_recoveries</span> <span class="o">=</span> <span class="n">gamma</span> <span class="o">*</span> <span class="n">I</span><span class="p">[</span><span class="n">t</span><span class="p">]</span>

    <span class="n">S</span><span class="p">[</span><span class="n">t</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">S</span><span class="p">[</span><span class="n">t</span><span class="p">]</span> <span class="o">-</span> <span class="n">new_infections</span>
    <span class="n">I</span><span class="p">[</span><span class="n">t</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">I</span><span class="p">[</span><span class="n">t</span><span class="p">]</span> <span class="o">+</span> <span class="n">new_infections</span> <span class="o">-</span> <span class="n">new_recoveries</span>
    <span class="n">R</span><span class="p">[</span><span class="n">t</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">R</span><span class="p">[</span><span class="n">t</span><span class="p">]</span> <span class="o">+</span> <span class="n">new_recoveries</span>

<span class="n">plt</span><span class="p">.</span><span class="nf">plot</span><span class="p">(</span><span class="n">S</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="sh">'</span><span class="s">Duyarlı</span><span class="sh">'</span><span class="p">)</span>
<span class="n">plt</span><span class="p">.</span><span class="nf">plot</span><span class="p">(</span><span class="n">I</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="sh">'</span><span class="s">Enfekte</span><span class="sh">'</span><span class="p">)</span>
<span class="n">plt</span><span class="p">.</span><span class="nf">plot</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="sh">'</span><span class="s">İyileşen</span><span class="sh">'</span><span class="p">)</span>
<span class="n">plt</span><span class="p">.</span><span class="nf">xlabel</span><span class="p">(</span><span class="sh">'</span><span class="s">Gün</span><span class="sh">'</span><span class="p">)</span>
<span class="n">plt</span><span class="p">.</span><span class="nf">ylabel</span><span class="p">(</span><span class="sh">'</span><span class="s">Kişi sayısı</span><span class="sh">'</span><span class="p">)</span>
<span class="n">plt</span><span class="p">.</span><span class="nf">legend</span><span class="p">()</span>
<span class="n">plt</span><span class="p">.</span><span class="nf">show</span><span class="p">()</span>
</code></pre></div></div>

<p>Grafikte enfekte kişi sayısı önce yükselir, bir zirveye ulaşır ve ardından düşer. Zirvenin zamanı ve yüksekliği, sağlık sisteminin ihtiyaç duyabileceği yatak veya personel kapasitesini tahmin etmeye yardımcı olur.</p>

<h2 id="güçlü-ama-kusursuz-değil">Güçlü ama kusursuz değil</h2>

<p>Temel SIR modeli herkesin eşit sıklıkta temas ettiğini, bağışıklığın kaybolmadığını ve bulaşma hızının sabit kaldığını varsayar. Oysa yaş, konum, davranış değişiklikleri, aşılar ve yeni varyantlar sonucu etkiler. Bu nedenle model bir kehanet makinesi değil, farklı senaryoları karşılaştıran matematiksel bir laboratuvardır. Doğru verilerle güncellendiğinde salgının yönünü anlamayı ve müdahalelerin olası etkisini ölçmeyi sağlayan güçlü bir pusulaya dönüşür.</p>

<p><img src="/img/salginin-matematigi-sir-16.svg" alt="salginin-matematigi-sir-16" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="sir modeli" /><category term="matematiksel modelleme" /><category term="epidemiyoloji" /><category term="python" /><category term="simülasyon" /><category term="veri bilimi" /><summary type="html"><![CDATA[Bir salgının geleceğini tahmin etmek, kristal küreye bakmaktan çok daha sistematik bir iştir. Matematiksel modeller; bulaşma hızı, iyileşme süresi ve duyarlı nüfus gibi değişkenleri kullanarak vaka sayılarının zaman içinde nasıl değişebileceğini gösterir. Bu modellerin en tanınmış örneklerinden biri olan SIR, karmaşık bir toplumsal olayı üç temel nüfus grubuyla açıklamaya çalışır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/salginin-matematigi-sir-16.png" /><media:content medium="image" url="https://program.sonsuz.us/img/salginin-matematigi-sir-16.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Tıbbi Teşhis Destek Sistemlerinde Karar Ağaçları: Semptomdan Öncelik Listesine</title><link href="https://program.sonsuz.us/posts/tibbi-teshis-destek-sistemlerinde-karar-agaclari-semptomdan-oncelik-listesine/" rel="alternate" type="text/html" title="Tıbbi Teşhis Destek Sistemlerinde Karar Ağaçları: Semptomdan Öncelik Listesine" /><published>2026-10-25T00:00:00+00:00</published><updated>2026-10-25T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/tibbi-teshis-destek-sistemlerinde-karar-agaclari-semptomdan-oncelik-listesine</id><content type="html" xml:base="https://program.sonsuz.us/posts/tibbi-teshis-destek-sistemlerinde-karar-agaclari-semptomdan-oncelik-listesine/"><![CDATA[<p>Ateş, öksürük ve nefes darlığı aynı anda görüldüğünde sistem hangi hastalığı önce değerlendirmelidir? Tıbbi teşhis destek sistemlerindeki karar ağaçları, semptomları dallara ayırarak bu soruya açıklanabilir ve denetlenebilir yanıtlar üretir. Ancak amaç doktorun yerine geçmek değil, olası hastalıkları klinik inceleme için önceliklendirmektir.
``</p>

<h2 id="karar-ağacının-temel-mantığı">Karar ağacının temel mantığı</h2>

<p>Karar ağacı, hasta özellikleri üzerinde art arda sorular sorar. Her <strong>düğüm</strong> bir koşulu, <strong>dal</strong> koşulun sonucunu, <strong>yaprak</strong> ise hastalık sınıfını veya risk puanını temsil eder. Örneğin ilk soru “Ateş var mı?”, sonraki soru “Oksijen satürasyonu düşük mü?” olabilir.</p>

<p>Bu yapı klasik uzman sistemlerde hekimlerin tanımladığı kurallarla kurulabilir. Makine öğrenmesi yaklaşımında ise model, geçmiş hasta kayıtlarından hangi soruların daha ayırt edici olduğunu öğrenir. Ağacın iyi bir soru seçmesi için safsızlık ölçüleri kullanılır.</p>

<p>Entropi şu şekilde hesaplanır:</p>

\[H(S)=-\sum_{i=1}^{k} p_i\log_2(p_i)\]

<p>Burada $p_i$, veri kümesindeki $i$ hastalık sınıfının oranıdır. Bir bölünme sonrasında entropi ne kadar azalırsa soru o kadar bilgilendiricidir. Alternatif olarak Gini safsızlığı kullanılabilir:</p>

\[Gini(S)=1-\sum_{i=1}^{k}p_i^2\]

<table>
  <thead>
    <tr>
      <th>Ölçüt</th>
      <th>Temel fikir</th>
      <th>Avantaj</th>
      <th>Kullanım</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Entropi</td>
      <td>Belirsizliği ölçer</td>
      <td>Bilgi kuramsal yorumu güçlüdür</td>
      <td>ID3 ve C4.5</td>
    </tr>
    <tr>
      <td>Gini</td>
      <td>Sınıfların karışıklığını ölçer</td>
      <td>Hesaplaması daha hızlıdır</td>
      <td>CART</td>
    </tr>
    <tr>
      <td>Hata oranı</td>
      <td>Yanlış sınıflandırmayı ölçer</td>
      <td>Kolay yorumlanır</td>
      <td>Model değerlendirme</td>
    </tr>
  </tbody>
</table>

<h2 id="semptomlardan-hastalık-önceliğine">Semptomlardan hastalık önceliğine</h2>

<p>Bir teşhis destek sistemi yalnızca “grip” gibi tek bir cevap vermemelidir. Daha güvenli yaklaşım; zatürre, grip ve alerji gibi seçenekleri tahmini olasılıklarıyla sıralamaktır. Yaprak düğümündeki sınıf dağılımı bu amaçla kullanılabilir:</p>

\[P(hastalık_i\mid semptomlar)=\frac{n_i}{N}\]

<p>Burada $n_i$, yaprağa ulaşan ilgili hastalık vakalarının; $N$ ise o yapraktaki tüm vakaların sayısıdır. Yine de bu değer doğrudan klinik kesinlik değildir. Yaş, gebelik, kronik hastalıklar ve test sonuçları risk değerlendirmesini değiştirebilir.</p>

<p>Aşağıdaki örnek, eğitim amacıyla hazırlanmış basitleştirilmiş bir sınıflandırıcıdır:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">sklearn.tree</span> <span class="kn">import</span> <span class="n">DecisionTreeClassifier</span>

<span class="c1"># ateş, öksürük, nefes darlığı, düşük satürasyon
</span><span class="n">X</span> <span class="o">=</span> <span class="p">[</span>
    <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
    <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span>
    <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">],</span>
    <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span>
    <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span>
<span class="p">]</span>
<span class="n">y</span> <span class="o">=</span> <span class="p">[</span><span class="sh">'</span><span class="s">grip</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">zatürre</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">alerji</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">zatürre</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">alerji</span><span class="sh">'</span><span class="p">]</span>

<span class="n">model</span> <span class="o">=</span> <span class="nc">DecisionTreeClassifier</span><span class="p">(</span>
    <span class="n">criterion</span><span class="o">=</span><span class="sh">'</span><span class="s">entropy</span><span class="sh">'</span><span class="p">,</span>
    <span class="n">max_depth</span><span class="o">=</span><span class="mi">3</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</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>

<span class="n">hasta</span> <span class="o">=</span> <span class="p">[[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">]]</span>
<span class="nf">print</span><span class="p">(</span><span class="n">model</span><span class="p">.</span><span class="n">classes_</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="n">model</span><span class="p">.</span><span class="nf">predict_proba</span><span class="p">(</span><span class="n">hasta</span><span class="p">))</span>
</code></pre></div></div>

<p>Kod, semptomları ikili özellikler olarak işler ve hastalıkların olasılık dağılımını üretir. <code class="language-plaintext highlighter-rouge">max_depth</code> ağacın ezberlemesini sınırlar; <code class="language-plaintext highlighter-rouge">class_weight='balanced'</code> ise az görülen sınıfların tamamen göz ardı edilmesini azaltır. Gerçek sistemlerde bu birkaç satırlık örnek yerine doğrulanmış, anonimleştirilmiş ve çok daha kapsamlı klinik veriler gerekir.</p>

<h2 id="güçlü-ve-riskli-yönler">Güçlü ve riskli yönler</h2>

<table>
  <thead>
    <tr>
      <th>Güçlü yön</th>
      <th>Klinik karşılığı</th>
      <th>Olası risk</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Açıklanabilir kurallar</td>
      <td>Hekim karar yolunu görebilir</td>
      <td>Aşırı basitleştirme</td>
    </tr>
    <tr>
      <td>Hızlı tahmin</td>
      <td>Triyaj sürecini destekler</td>
      <td>Yanlış güven hissi</td>
    </tr>
    <tr>
      <td>Eksik değerlere uyarlanabilirlik</td>
      <td>Her test zorunlu olmayabilir</td>
      <td>Sistematik veri eksikliği</td>
    </tr>
    <tr>
      <td>Özellik önemleri</td>
      <td>Etkili semptomlar incelenebilir</td>
      <td>Korelasyonu nedensellik sanma</td>
    </tr>
  </tbody>
</table>

<p>En kritik sorunlardan biri sınıf dengesizliğidir. Nadir fakat tehlikeli bir hastalık az sayıda örnek içerdiğinde model onu öğrenemeyebilir. Bu nedenle yalnızca doğruluk değil; duyarlılık, özgüllük ve özellikle yanlış negatif oranı izlenmelidir. Budama, çapraz doğrulama ve bağımsız hastane verileriyle dış doğrulama da aşırı öğrenmeyi azaltır.</p>

<p>Sonuç olarak karar ağaçları, “Bu öneri neden üretildi?” sorusuna anlaşılır cevap verebildikleri için sağlık bilişiminde değerlidir. Fakat kaliteli veri, klinik doğrulama, gizlilik, yanlılık denetimi ve insan gözetimi olmadan güvenli teşhis araçlarına dönüşemezler. En doğru rol, hekime rakip olmak değil; önemli ihtimallerin gözden kaçmasını önleyen dikkatli bir yardımcı olmaktır.</p>

<p><img src="/img/tibbi-teshis-destek-83.svg" alt="tibbi-teshis-destek-83" /></p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="karar ağaçları" /><category term="yapay zeka" /><category term="sağlık bilişimi" /><category term="uzman sistemler" /><category term="makine öğrenmesi" /><category term="açıklanabilir yapay zeka" /><summary type="html"><![CDATA[Ateş, öksürük ve nefes darlığı aynı anda görüldüğünde sistem hangi hastalığı önce değerlendirmelidir? Tıbbi teşhis destek sistemlerindeki karar ağaçları, semptomları dallara ayırarak bu soruya açıklanabilir ve denetlenebilir yanıtlar üretir. Ancak amaç doktorun yerine geçmek değil, olası hastalıkları klinik inceleme için önceliklendirmektir.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/tibbi-teshis-destek-83.png" /><media:content medium="image" url="https://program.sonsuz.us/img/tibbi-teshis-destek-83.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>