<?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-25T18:05:47+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">Ahırdaki Sessiz Dedektif: Görüntü İşleme ile Hayvan Davranışlarını İzlemek</title><link href="https://program.sonsuz.us/posts/ahirdaki-sessiz-dedektif-goruntu-isleme-ile-hayvan-davranislarini-izlemek/" rel="alternate" type="text/html" title="Ahırdaki Sessiz Dedektif: Görüntü İşleme ile Hayvan Davranışlarını İzlemek" /><published>2026-10-25T00:00:00+00:00</published><updated>2026-10-25T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/ahirdaki-sessiz-dedektif-goruntu-isleme-ile-hayvan-davranislarini-izlemek</id><content type="html" xml:base="https://program.sonsuz.us/posts/ahirdaki-sessiz-dedektif-goruntu-isleme-ile-hayvan-davranislarini-izlemek/"><![CDATA[<p>Bir ineğin daha az yürümesi, sürüden uzaklaşması veya normalden uzun süre yatması çoğu zaman sağlık sorununun ilk işaretidir. Ancak yüzlerce hayvanın bulunduğu bir işletmede bu küçük değişimleri insan gözüyle sürekli takip etmek oldukça zordur. Kameralar ve görüntü işleme algoritmaları, hayvanları rahatsız etmeden gözlemleyerek hareketleri ölçülebilir verilere dönüştüren sessiz birer dedektif gibi çalışır.
``</p>

<h2 id="kameradan-davranış-verisine-giden-yol">Kameradan davranış verisine giden yol</h2>

<p>Sistem yalnızca video kaydetmez; her kareyi analiz ederek önce hayvanları bulur, ardından aynı hayvanı kareler boyunca takip eder. Genel işlem hattı şu adımlardan oluşur:</p>

<ol>
  <li>Kamera görüntüsünün alınması ve zaman damgasıyla kaydedilmesi</li>
  <li>Gürültü azaltma, parlaklık düzeltme ve perspektif dönüşümü</li>
  <li>Hayvanların nesne tespit modeliyle belirlenmesi</li>
  <li>Her hayvana geçici veya kalıcı bir kimlik atanması</li>
  <li>Konum, hız, yatma süresi ve yemlik ziyareti gibi özelliklerin çıkarılması</li>
  <li>Olağan dışı davranışlar için uyarı üretilmesi</li>
</ol>

<p>Nesne tespiti, görüntüdeki her hayvanı bir sınırlayıcı kutuyla gösterir. Takip algoritması ise bu kutunun sonraki karede hangi kutuyla eşleştiğini belirler. Böylece sistem “karede üç inek var” demekle kalmaz; “17 numaralı inek son iki saatte yalnızca 40 metre yürüdü” diyebilir.</p>

<h2 id="hareket-nasıl-sayıya-dönüşür">Hareket nasıl sayıya dönüşür?</h2>

<p>Bir hayvanın görüntü üzerindeki merkezi $(x_t, y_t)$ ve bir sonraki karedeki merkezi $(x_{t+1}, y_{t+1})$ olsun. Piksel cinsinden yer değiştirme Öklid uzaklığıyla hesaplanabilir:</p>

\[d_t = \sqrt{(x_{t+1}-x_t)^2 + (y_{t+1}-y_t)^2}\]

<p>Kamera kalibrasyonu sayesinde piksel-metre dönüşümü yapılırsa ortalama hız yaklaşık olarak $v=d/\Delta t$ ile bulunur. Fakat tek bir düşük hız değeri hastalık anlamına gelmez. Yaş, sıcaklık, sağım zamanı ve sürünün günlük düzeni de hesaba katılmalıdır. Bu nedenle güvenilir sistemler tek kare yerine zaman serilerini değerlendirir.</p>

<table>
  <thead>
    <tr>
      <th>Ölçülen özellik</th>
      <th>Olası yorum</th>
      <th>Dikkat edilmesi gereken</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Uzun yatma süresi</td>
      <td>Ağrı, yorgunluk veya topallık</td>
      <td>Geviş getirme dönemiyle karışabilir</td>
    </tr>
    <tr>
      <td>Azalan yemlik ziyareti</td>
      <td>İştahsızlık veya hastalık</td>
      <td>Yem dağıtım saati sonucu etkiler</td>
    </tr>
    <tr>
      <td>Sık ve düzensiz hareket</td>
      <td>Stres veya kızgınlık</td>
      <td>Sürü içi etkileşim incelenmelidir</td>
    </tr>
    <tr>
      <td>Sürüden uzak durma</td>
      <td>Rahatsızlık veya sosyal baskı</td>
      <td>Alanın fiziksel düzeni önemlidir</td>
    </tr>
    <tr>
      <td>Tekrarlanan baş hareketi</td>
      <td>Kaşıntı ya da stres</td>
      <td>Sinek yoğunluğu kontrol edilmelidir</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/ahirdaki-sessiz-dedektif-27.svg" alt="ahirdaki-sessiz-dedektif-27" /></p>

<h2 id="basit-bir-hareket-ölçümü">Basit bir hareket ölçümü</h2>

<p>Aşağıdaki Python örneği, takip modelinden geldiği varsayılan merkez noktaları arasındaki toplam piksel mesafesini hesaplar:</p>

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

<span class="k">def</span> <span class="nf">toplam_hareket</span><span class="p">(</span><span class="n">konumlar</span><span class="p">,</span> <span class="n">metre_per_piksel</span><span class="o">=</span><span class="mf">0.02</span><span class="p">):</span>
    <span class="n">toplam_piksel</span> <span class="o">=</span> <span class="mf">0.0</span>

    <span class="k">for</span> <span class="n">onceki</span><span class="p">,</span> <span class="n">simdiki</span> <span class="ow">in</span> <span class="nf">zip</span><span class="p">(</span><span class="n">konumlar</span><span class="p">,</span> <span class="n">konumlar</span><span class="p">[</span><span class="mi">1</span><span class="p">:]):</span>
        <span class="n">dx</span> <span class="o">=</span> <span class="n">simdiki</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">onceki</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
        <span class="n">dy</span> <span class="o">=</span> <span class="n">simdiki</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">onceki</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
        <span class="n">toplam_piksel</span> <span class="o">+=</span> <span class="nf">hypot</span><span class="p">(</span><span class="n">dx</span><span class="p">,</span> <span class="n">dy</span><span class="p">)</span>

    <span class="k">return</span> <span class="n">toplam_piksel</span> <span class="o">*</span> <span class="n">metre_per_piksel</span>

<span class="n">iz</span> <span class="o">=</span> <span class="p">[(</span><span class="mi">120</span><span class="p">,</span> <span class="mi">80</span><span class="p">),</span> <span class="p">(</span><span class="mi">124</span><span class="p">,</span> <span class="mi">83</span><span class="p">),</span> <span class="p">(</span><span class="mi">130</span><span class="p">,</span> <span class="mi">85</span><span class="p">),</span> <span class="p">(</span><span class="mi">131</span><span class="p">,</span> <span class="mi">90</span><span class="p">)]</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">Tahmini hareket: </span><span class="si">{</span><span class="nf">toplam_hareket</span><span class="p">(</span><span class="n">iz</span><span class="p">)</span><span class="si">:</span><span class="p">.</span><span class="mi">2</span><span class="n">f</span><span class="si">}</span><span class="s"> metre</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div>

<p>Bu kod tespiti kendisi yapmaz; YOLO gibi bir model ve ByteTrack benzeri bir takipçi tarafından üretilen koordinatları anlamlı bir mesafeye çevirir. Gerçek uygulamada kamera açısının yol açtığı perspektif hatası kalibrasyonla düzeltilmelidir.</p>

<h2 id="sağlık-uyarısı-nasıl-oluşturulur">Sağlık uyarısı nasıl oluşturulur?</h2>

<p>Her hayvan için geçmiş davranışlardan bir normal aralık öğrenilebilir. Günlük hareket miktarı $X$, geçmiş ortalama $\mu$ ve standart sapma $\sigma$ kullanılarak standartlaştırılır:</p>

\[z = \frac{X-\mu}{\sigma}\]

<p>Örneğin $z&lt;-2$ olması, hareketin alışılmış seviyenin belirgin biçimde altına düştüğünü gösterebilir. Yine de bu sonuç doğrudan teşhis değildir; veteriner incelemesini tetikleyen bir erken uyarıdır. Yanlış alarmları azaltmak için hareket, yem tüketimi, vücut sıcaklığı ve sağım verisi birlikte değerlendirilebilir.</p>

<h2 id="sahadaki-gerçek-zorluklar">Sahadaki gerçek zorluklar</h2>

<p>Toz, gece karanlığı, hayvanların birbirini kapatması ve kirlenen kamera lensleri model başarısını düşürür. Kızılötesi kamera, uygun aydınlatma ve farklı açılardan çekim bu sorunları azaltabilir. Ayrıca verilerin güvenli saklanması, çalışan mahremiyeti ve algoritmanın farklı ırklar üzerinde doğrulanması unutulmamalıdır.</p>

<p>Sonuç olarak görüntü işleme, yetiştiricinin deneyiminin yerini almak yerine dikkatini doğru hayvana yönlendirir. Doğru kurulan bir sistem; hastalıkları daha erken fark etmeye, refahı artırmaya ve işletme kaynaklarını daha bilinçli kullanmaya yardımcı olur.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="görüntü işleme" /><category term="yapay zeka" /><category term="hayvancılık" /><category term="davranış analizi" /><category term="bilgisayarlı görü" /><category term="python" /><summary type="html"><![CDATA[Bir ineğin daha az yürümesi, sürüden uzaklaşması veya normalden uzun süre yatması çoğu zaman sağlık sorununun ilk işaretidir. Ancak yüzlerce hayvanın bulunduğu bir işletmede bu küçük değişimleri insan gözüyle sürekli takip etmek oldukça zordur. Kameralar ve görüntü işleme algoritmaları, hayvanları rahatsız etmeden gözlemleyerek hareketleri ölçülebilir verilere dönüştüren sessiz birer dedektif gibi çalışır.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/ahirdaki-sessiz-dedektif-27.png" /><media:content medium="image" url="https://program.sonsuz.us/img/ahirdaki-sessiz-dedektif-27.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">Akıllı Termostatlar Sizi Nasıl Öğreniyor? Konforun Arkasındaki Algoritmalar</title><link href="https://program.sonsuz.us/posts/akilli-termostatlar-sizi-nasil-ogreniyor-konforun-arkasindaki-algoritmalar/" rel="alternate" type="text/html" title="Akıllı Termostatlar Sizi Nasıl Öğreniyor? Konforun Arkasındaki Algoritmalar" /><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-termostatlar-sizi-nasil-ogreniyor-konforun-arkasindaki-algoritmalar</id><content type="html" xml:base="https://program.sonsuz.us/posts/akilli-termostatlar-sizi-nasil-ogreniyor-konforun-arkasindaki-algoritmalar/"><![CDATA[<p>Akıllı bir termostatın sabah siz uyanmadan evi ısıtması sihir gibi görünebilir. Oysa cihazın içinde pelerinli bir büyücü değil; sensörler, geçmiş veriler ve öğrenen algoritmalar bulunur. Termostat, hangi saatlerde evde olduğunuzu, hangi sıcaklıkları tercih ettiğinizi ve evin ne kadar sürede ısındığını gözlemleyerek zamanla kişisel bir ısıtma planı oluşturur.</p>

<p>``</p>

<h2 id="termostat-hangi-verileri-toplar">Termostat hangi verileri toplar?</h2>

<p>Öğrenme süreci, düzenli olarak ölçüm yapılmasıyla başlar. Temel veri noktaları oda sıcaklığı, hedef sıcaklık, saat, gün ve kullanıcının yaptığı manuel değişikliklerdir. Daha gelişmiş cihazlar hareket sensörlerinden, telefon konumundan, nem ölçümlerinden ve hava durumu servislerinden de yararlanabilir.</p>

<table>
  <thead>
    <tr>
      <th>Veri</th>
      <th>Algoritmaya anlattığı şey</th>
      <th>Örnek</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Saat ve gün</td>
      <td>Günlük veya haftalık rutin</td>
      <td>Hafta içi 07.00’de uyanma</td>
    </tr>
    <tr>
      <td>Manuel ayar</td>
      <td>Kullanıcının gerçek tercihi</td>
      <td>Akşam sıcaklığı 22°C yapma</td>
    </tr>
    <tr>
      <td>Hareket sensörü</td>
      <td>Evde birinin bulunup bulunmadığı</td>
      <td>İki saat hareket algılanmaması</td>
    </tr>
    <tr>
      <td>Dış sıcaklık</td>
      <td>Evin ısınma hızını etkileyen koşul</td>
      <td>Dışarısı -3°C</td>
    </tr>
    <tr>
      <td>Telefon konumu</td>
      <td>Eve yaklaşma veya evden ayrılma</td>
      <td>Kullanıcı eve 5 km uzakta</td>
    </tr>
  </tbody>
</table>

<p><img src="/img/akilli-termostatlar-sizi-11.svg" alt="akilli-termostatlar-sizi-11" /></p>

<p>Burada kritik nokta şudur: Tek bir değişiklik alışkanlık sayılmaz. Kullanıcının sıcaklığı bir akşam yükseltmesi tesadüf olabilir. Algoritma, tekrar eden örüntülere daha fazla güvenmelidir.</p>

<h2 id="öğrenmenin-temel-mantığı">Öğrenmenin temel mantığı</h2>

<p>Basit bir sistem, benzer zaman dilimlerindeki tercihlerin hareketli ortalamasını kullanabilir. Son $n$ günde aynı saatte seçilen sıcaklıklar $T_1, T_2, \ldots, T_n$ ise tahmin şöyle hesaplanır:</p>

\[\hat{T}=\frac{1}{n}\sum_{i=1}^{n}T_i\]

<p>Yeni davranışların daha önemli olması istenirse üstel düzeltme uygulanabilir:</p>

\[S_t=\alpha T_t+(1-\alpha)S_{t-1}\]

<p>Buradaki $\alpha$, algoritmanın değişime ne kadar hızlı tepki verdiğini belirler. Büyük bir $\alpha$ yeni tercihlere hızla uyum sağlar; küçük değer ise geçmiş alışkanlıkları daha uzun süre korur.</p>

<table>
  <thead>
    <tr>
      <th>Yaklaşım</th>
      <th>Güçlü yanı</th>
      <th>Zayıf yanı</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Sabit program</td>
      <td>Basit ve öngörülebilir</td>
      <td>Değişen rutine uymaz</td>
    </tr>
    <tr>
      <td>Hareketli ortalama</td>
      <td>Gürültüyü azaltır</td>
      <td>Ani değişiklikleri geç öğrenir</td>
    </tr>
    <tr>
      <td>Karar ağacı</td>
      <td>Saat, hava ve varlığı birlikte işler</td>
      <td>Fazla veriyle karmaşıklaşabilir</td>
    </tr>
    <tr>
      <td>Pekiştirmeli öğrenme</td>
      <td>Konfor ve tasarrufu birlikte optimize eder</td>
      <td>Güvenli keşif mekanizması gerektirir</td>
    </tr>
  </tbody>
</table>

<h2 id="küçük-bir-öğrenme-örneği">Küçük bir öğrenme örneği</h2>

<p>Aşağıdaki Python kodu, belirli bir saat için son sıcaklık tercihlerine daha yüksek ağırlık verir. Böylece termostat eski alışkanlıkları tamamen unutmadan yeni davranışlara uyum sağlar.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">sicaklik_tahmini</span><span class="p">(</span><span class="n">tercihler</span><span class="p">,</span> <span class="n">alpha</span><span class="o">=</span><span class="mf">0.35</span><span class="p">):</span>
    <span class="sh">"""</span><span class="s">Geçmiş tercihlerden üstel düzeltilmiş hedef üretir.</span><span class="sh">"""</span>
    <span class="k">if</span> <span class="ow">not</span> <span class="n">tercihler</span><span class="p">:</span>
        <span class="k">return</span> <span class="mf">20.0</span>  <span class="c1"># Veri yoksa güvenli varsayılan
</span>
    <span class="n">tahmin</span> <span class="o">=</span> <span class="n">tercihler</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
    <span class="k">for</span> <span class="n">sicaklik</span> <span class="ow">in</span> <span class="n">tercihler</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
        <span class="n">tahmin</span> <span class="o">=</span> <span class="n">alpha</span> <span class="o">*</span> <span class="n">sicaklik</span> <span class="o">+</span> <span class="p">(</span><span class="mi">1</span> <span class="o">-</span> <span class="n">alpha</span><span class="p">)</span> <span class="o">*</span> <span class="n">tahmin</span>

    <span class="k">return</span> <span class="nf">round</span><span class="p">(</span><span class="n">tahmin</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>

<span class="n">aksam_tercihleri</span> <span class="o">=</span> <span class="p">[</span><span class="mi">21</span><span class="p">,</span> <span class="mf">21.5</span><span class="p">,</span> <span class="mi">22</span><span class="p">,</span> <span class="mi">22</span><span class="p">,</span> <span class="mf">22.5</span><span class="p">]</span>
<span class="nf">print</span><span class="p">(</span><span class="nf">sicaklik_tahmini</span><span class="p">(</span><span class="n">aksam_tercihleri</span><span class="p">))</span>
</code></pre></div></div>

<p>Gerçek bir cihaz yalnızca sıcaklığı tahmin etmez. Evin termal davranışını da öğrenir. Örneğin salonun 19°C’den 22°C’ye ulaşması 30 dakika sürüyorsa sistem, hedef saate kadar beklemek yerine kombiyi önceden çalıştırır.</p>

<h2 id="konfor-ile-tasarruf-arasındaki-denge">Konfor ile tasarruf arasındaki denge</h2>

<p>Termostatın amacı evi sürekli sıcak tutmak değildir. Daha mantıklı hedef, konfor kaybı ile enerji tüketimini birlikte azaltmaktır:</p>

\[J=\lambda E+(1-\lambda)C\]

<p>Burada $E$ enerji maliyetini, $C$ hedef sıcaklıktan sapmayı, $\lambda$ ise tasarrufa verilen önemi temsil eder. Kullanıcı üşüyüp ayarı sürekli değiştiriyorsa algoritma konfora daha fazla ağırlık vermeyi öğrenebilir.</p>

<p>Elbette öğrenen cihazlarda mahremiyet önemlidir. Evde bulunma saatleri hassas bilgi sayılmalı; veriler mümkünse cihaz üzerinde işlenmeli, şifrelenmeli ve kullanıcı tarafından silinebilmelidir. Ayrıca donma riski veya aşırı ısınma gibi durumlarda öğrenilmiş kararlar güvenlik sınırlarını aşmamalıdır.</p>

<p>Sonuç olarak akıllı termostat, yalnızca uzaktan kontrol edilen bir düğme değildir. Tekrarlanan davranışları istatistiksel örüntülere dönüştüren, evin fiziksel tepkisini modelleyen ve konfor ile maliyet arasında sürekli pazarlık yapan küçük bir karar sistemidir. Üstelik siz rutininizi değiştirdikçe o da ders programını günceller.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="akıllı termostat" /><category term="makine öğrenmesi" /><category term="nesnelerin interneti" /><category term="yapay zeka" /><category term="enerji verimliliği" /><summary type="html"><![CDATA[Akıllı bir termostatın sabah siz uyanmadan evi ısıtması sihir gibi görünebilir. Oysa cihazın içinde pelerinli bir büyücü değil; sensörler, geçmiş veriler ve öğrenen algoritmalar bulunur. Termostat, hangi saatlerde evde olduğunuzu, hangi sıcaklıkları tercih ettiğinizi ve evin ne kadar sürede ısındığını gözlemleyerek zamanla kişisel bir ısıtma planı oluşturur.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/akilli-termostatlar-sizi-11.png" /><media:content medium="image" url="https://program.sonsuz.us/img/akilli-termostatlar-sizi-11.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Borsa Veri Akışları: Fiyatlar Ekranımıza Milisaniyeler İçinde Nasıl Ulaşıyor?</title><link href="https://program.sonsuz.us/posts/borsa-veri-akislari-fiyatlar-ekranimiza-milisaniyeler-icinde-nasil-ulasiyor/" rel="alternate" type="text/html" title="Borsa Veri Akışları: Fiyatlar Ekranımıza Milisaniyeler İçinde Nasıl Ulaşıyor?" /><published>2026-10-25T00:00:00+00:00</published><updated>2026-10-25T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/borsa-veri-akislari-fiyatlar-ekranimiza-milisaniyeler-icinde-nasil-ulasiyor</id><content type="html" xml:base="https://program.sonsuz.us/posts/borsa-veri-akislari-fiyatlar-ekranimiza-milisaniyeler-icinde-nasil-ulasiyor/"><![CDATA[<p>Bir hisse fiyatının ekranda yanıp sönmesi basit görünür: Yeşil olduysa yükseldi, kırmızı olduysa düştü. Oysa bu küçük değişikliğin arkasında borsalar, veri dağıtıcıları, özel ağlar, mesaj protokolleri ve milisaniyelerle yarışan yazılımlar bulunur. Gelin, bir emrin borsaya ulaşmasından fiyatın bilgisayarımızda görünmesine kadar geçen dijital yolculuğu inceleyelim.</p>

<p><img src="/img/borsa-veri-akislari-31.svg" alt="borsa-veri-akislari-31" /></p>

<p>``</p>

<h2 id="her-şey-emir-defterinde-başlar">Her şey emir defterinde başlar</h2>

<p>Borsa, alıcılarla satıcıları eşleştiren merkezi bir pazar gibi çalışır. Yatırımcıların gönderdiği alış ve satış emirleri <strong>emir defterinde</strong> tutulur. Örneğin en yüksek alış emri 99,90 TL, en düşük satış emri 100 TL ise alış-satış farkı, yani <em>spread</em>, şöyledir:</p>

\[\text{Spread} = \text{En iyi satış} - \text{En iyi alış} = 100 - 99{,}90 = 0{,}10\text{ TL}\]

<p>Bir alış emri mevcut satış emriyle eşleştiğinde işlem gerçekleşir. Borsanın eşleştirme motoru bu işlemi kaydeder ve yeni fiyat, hacim ya da emir defteri değişikliği hakkında bir piyasa verisi mesajı üretir.</p>

<h2 id="veri-hangi-duraklardan-geçer">Veri hangi duraklardan geçer?</h2>

<p>Tipik akış şu şekildedir:</p>

<ol>
  <li>Aracı kurum, yatırımcının emrini borsaya gönderir.</li>
  <li>Borsanın eşleştirme motoru uygun karşı emri bulur.</li>
  <li>İşlem veya defter güncellemesi oluşturulur.</li>
  <li>Borsa, veriyi doğrudan bağlantılara ve veri dağıtıcılarına yayınlar.</li>
  <li>Aracı kurumun sunucusu mesajı işler.</li>
  <li>WebSocket gibi sürekli bir bağlantı üzerinden uygulamaya iletir.</li>
  <li>Arayüz yeni fiyatı ekranda gösterir.</li>
</ol>

<p>Burada görülen fiyat çoğu zaman tek başına gelmez. Mesaj; sembol, zaman damgası, fiyat, miktar, işlem kimliği ve mesaj sıra numarası gibi alanlar taşır.</p>

<table>
  <thead>
    <tr>
      <th>Veri türü</th>
      <th>İçerik</th>
      <th>Yaygın kullanım</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Son işlem</td>
      <td>Gerçekleşen fiyat ve miktar</td>
      <td>Fiyat ekranları</td>
    </tr>
    <tr>
      <td>Seviye 1</td>
      <td>En iyi alış ve satış</td>
      <td>Temel alım satım</td>
    </tr>
    <tr>
      <td>Seviye 2</td>
      <td>Birden fazla fiyat kademesi</td>
      <td>Derinlik analizi</td>
    </tr>
    <tr>
      <td>Tick verisi</td>
      <td>Her değişiklik veya işlem</td>
      <td>Algoritmik ticaret</td>
    </tr>
    <tr>
      <td>Gecikmeli veri</td>
      <td>Genellikle 15 dakika geriden</td>
      <td>Ücretsiz uygulamalar</td>
    </tr>
  </tbody>
</table>

<h2 id="gerçek-zamanlı-demek-sıfır-gecikme-değildir">Gerçek zamanlı demek sıfır gecikme değildir</h2>

<p>Verinin yolculuğu mutlaka zaman alır. Toplam gecikme yaklaşık olarak bileşenlerine ayrılabilir:</p>

\[L_{toplam} = L_{borsa} + L_{ağ} + L_{işleme} + L_{istemci}\]

<p>Borsaya fiziksel olarak yakın veri merkezlerinde çalışan profesyonel sistemler mikrosaniyeleri önemser. Evdeki yatırımcı içinse internet rotası, aracı kurum altyapısı ve tarayıcının çizim süresi nedeniyle gecikme daha yüksek olabilir. Bu nedenle iki uygulamada aynı sembolün fiyatı kısa süreliğine farklı görünebilir.</p>

<table>
  <thead>
    <tr>
      <th>Yöntem</th>
      <th>Bağlantı modeli</th>
      <th>Avantaj</th>
      <th>Dezavantaj</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>REST API</td>
      <td>İstek-cevap</td>
      <td>Basit ve yaygın</td>
      <td>Sürekli sorgulama gerekir</td>
    </tr>
    <tr>
      <td>WebSocket</td>
      <td>Sürekli çift yönlü</td>
      <td>Düşük gecikmeli güncelleme</td>
      <td>Bağlantı yönetimi ister</td>
    </tr>
    <tr>
      <td>FIX</td>
      <td>Finans odaklı oturum</td>
      <td>Standart ve güvenilir</td>
      <td>Daha karmaşık</td>
    </tr>
    <tr>
      <td>Doğrudan veri akışı</td>
      <td>Borsaya özel protokol</td>
      <td>Çok hızlı</td>
      <td>Pahalı ve teknik</td>
    </tr>
  </tbody>
</table>

<h2 id="bilgisayarda-akışı-dinlemek">Bilgisayarda akışı dinlemek</h2>

<p>Aşağıdaki Python örneği, temsili bir WebSocket kanalından mesajları alır. Gerçek kullanımda adres, kimlik doğrulama ve mesaj biçimi veri sağlayıcısına göre değişir.</p>

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

<span class="k">async</span> <span class="k">def</span> <span class="nf">fiyatlari_dinle</span><span class="p">():</span>
    <span class="n">adres</span> <span class="o">=</span> <span class="sh">"</span><span class="s">wss://ornek-veri-saglayici.test/stream</span><span class="sh">"</span>

    <span class="k">async</span> <span class="k">with</span> <span class="n">websockets</span><span class="p">.</span><span class="nf">connect</span><span class="p">(</span><span class="n">adres</span><span class="p">)</span> <span class="k">as</span> <span class="n">baglanti</span><span class="p">:</span>
        <span class="n">abonelik</span> <span class="o">=</span> <span class="p">{</span><span class="sh">"</span><span class="s">type</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">subscribe</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">symbol</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">XYZ</span><span class="sh">"</span><span class="p">}</span>
        <span class="k">await</span> <span class="n">baglanti</span><span class="p">.</span><span class="nf">send</span><span class="p">(</span><span class="n">json</span><span class="p">.</span><span class="nf">dumps</span><span class="p">(</span><span class="n">abonelik</span><span class="p">))</span>

        <span class="k">async</span> <span class="k">for</span> <span class="n">mesaj</span> <span class="ow">in</span> <span class="n">baglanti</span><span class="p">:</span>
            <span class="n">veri</span> <span class="o">=</span> <span class="n">json</span><span class="p">.</span><span class="nf">loads</span><span class="p">(</span><span class="n">mesaj</span><span class="p">)</span>
            <span class="n">fiyat</span> <span class="o">=</span> <span class="n">veri</span><span class="p">.</span><span class="nf">get</span><span class="p">(</span><span class="sh">"</span><span class="s">price</span><span class="sh">"</span><span class="p">)</span>
            <span class="n">zaman</span> <span class="o">=</span> <span class="n">veri</span><span class="p">.</span><span class="nf">get</span><span class="p">(</span><span class="sh">"</span><span class="s">timestamp</span><span class="sh">"</span><span class="p">)</span>
            <span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="si">{</span><span class="n">zaman</span><span class="si">}</span><span class="s"> | XYZ: </span><span class="si">{</span><span class="n">fiyat</span><span class="si">}</span><span class="sh">"</span><span class="p">)</span>

<span class="n">asyncio</span><span class="p">.</span><span class="nf">run</span><span class="p">(</span><span class="nf">fiyatlari_dinle</span><span class="p">())</span>
</code></pre></div></div>

<p>Kod bağlantıyı açık tutar, sembole abone olur ve sunucu yeni mesaj gönderdikçe fiyatı yazdırır. REST API ile her saniye “Yeni fiyat var mı?” diye sormak yerine WebSocket sunucusu değişikliği kendisi iletir.</p>

<h2 id="paket-kaybı-ve-sıra-numaraları">Paket kaybı ve sıra numaraları</h2>

<p>Hız kadar doğruluk da önemlidir. Her mesaja artan bir sıra numarası eklenebilir. Sistem 105 numaralı mesajdan sonra 107’yi görürse 106’nın kaybolduğunu anlar. Ardından eksik veriyi yeniden ister veya güncel emir defteri görüntüsünü indirir. Aksi hâlde uygulama hızlı ama yanlış bir piyasa resmi gösterebilir.</p>

<p>Kısacası gerçek zamanlı borsa verisi, yalnızca internetten gelen bir sayı değildir. Eşleştirme motorundan başlayan; protokoller, ağlar, sıra kontrolleri ve kullanıcı arayüzüyle tamamlanan hassas bir veri zinciridir. Ekrandaki minicik fiyat hareketinin arkasında oldukça hareketli bir mühendislik piyasası vardır.</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="borsa" /><category term="finans" /><category term="veri akışı" /><category term="websocket" /><category term="algoritmik ticaret" /><category term="düşük gecikme" /><summary type="html"><![CDATA[Bir hisse fiyatının ekranda yanıp sönmesi basit görünür: Yeşil olduysa yükseldi, kırmızı olduysa düştü. Oysa bu küçük değişikliğin arkasında borsalar, veri dağıtıcıları, özel ağlar, mesaj protokolleri ve milisaniyelerle yarışan yazılımlar bulunur. Gelin, bir emrin borsaya ulaşmasından fiyatın bilgisayarımızda görünmesine kadar geçen dijital yolculuğu inceleyelim.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/borsa-veri-akislari-31.png" /><media:content medium="image" url="https://program.sonsuz.us/img/borsa-veri-akislari-31.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Değişken Oran Ödüllendirme: Loot Kutuları Neden Bu Kadar Çekici?</title><link href="https://program.sonsuz.us/posts/degisken-oran-odullendirme-loot-kutulari-neden-bu-kadar-cekici/" rel="alternate" type="text/html" title="Değişken Oran Ödüllendirme: Loot Kutuları Neden Bu Kadar Çekici?" /><published>2026-10-25T00:00:00+00:00</published><updated>2026-10-25T00:00:00+00:00</updated><id>https://program.sonsuz.us/posts/degisken-oran-odullendirme-loot-kutulari-neden-bu-kadar-cekici</id><content type="html" xml:base="https://program.sonsuz.us/posts/degisken-oran-odullendirme-loot-kutulari-neden-bu-kadar-cekici/"><![CDATA[<p><img src="/img/degisken-oran-odullendirme-90.svg" alt="degisken-oran-odullendirme-90" /></p>

<p>Bir sandığı açıyorsunuz: sıradan bir kılıç. Bir tane daha: yine sıradan. Tam bırakacakken ekranda altın renkli bir parıltı beliriyor ve nadir karakter çıkıyor! Loot kutularının çekiciliği yalnızca ödülün kendisinden değil, ödülün <strong>ne zaman geleceğini bilememekten</strong> doğar. Değişken oran ödüllendirme adı verilen bu mekanik; oyun tasarımını, davranış psikolojisini ve beynin ödül öğrenme sistemini aynı noktada buluşturur.
``</p>

<h2 id="değişken-oran-ödüllendirme-nedir">Değişken oran ödüllendirme nedir?</h2>

<p>Davranış biliminde ödüllendirme programları, bir davranışın hangi koşulda pekiştirileceğini açıklar. <strong>Sabit oranlı</strong> sistemde oyuncu, örneğin her 10 görevden sonra ödül kazanır. Değişken oranlı sistemdeyse ödül, öngörülemeyen sayıda denemeden sonra gelir.</p>

<p>Bir loot kutusundan nadir eşya çıkma olasılığı $p$ ise, ilk başarıya kadar gereken ortalama deneme sayısı yaklaşık olarak şöyledir:</p>

\[E[N] = \frac{1}{p}\]

<p>Örneğin nadir eşya olasılığı $p=0.02$ olduğunda beklenen değer 50 denemedir. Ancak bu, eşyanın kesinlikle 50. kutuda çıkacağı anlamına gelmez. İlk kutuda da çıkabilir, 150 kutu boyunca hiç çıkmayabilir. Belirsizliği güçlü kılan tam olarak bu dağılımdır.</p>

<table>
  <thead>
    <tr>
      <th>Ödül modeli</th>
      <th>Oyuncunun beklentisi</th>
      <th>Davranışsal etkisi</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Sabit oran</td>
      <td>Ödülün ne zaman geleceği bilinir</td>
      <td>Planlı ve kontrollü tekrar</td>
    </tr>
    <tr>
      <td>Değişken oran</td>
      <td>Her deneme kazandırabilir</td>
      <td>Israrlı tekrar davranışı</td>
    </tr>
    <tr>
      <td>Sabit zaman</td>
      <td>Belirli süre sonunda ödül</td>
      <td>Düzenli geri dönüş</td>
    </tr>
    <tr>
      <td>Değişken zaman</td>
      <td>Ödül zamanı belirsizdir</td>
      <td>Sık kontrol etme eğilimi</td>
    </tr>
  </tbody>
</table>

<h2 id="dopamin-yalnızca-haz-kimyasalı-değildir">Dopamin yalnızca haz kimyasalı değildir</h2>

<p>Dopamin çoğu zaman basitçe haz hormonu diye anlatılır; fakat daha doğru yaklaşım, onun <strong>motivasyon, dikkat ve ödül öğrenmesiyle</strong> ilişkili bir nörotransmiter olduğunu söylemektir. Beyin yalnızca ödüle değil, beklenen sonuç ile gerçekleşen sonuç arasındaki farka da tepki verir. Buna ödül tahmin hatası denir:</p>

\[\delta = r - V\]

<p>Burada $r$ alınan gerçek ödülü, $V$ ise beklenen değeri temsil eder. Sonuç beklenenden iyiyse $\delta$ pozitiftir ve beyin, ödülden önceki ipuçlarını öğrenmeye başlar. Sandığın sallanması, özel sesler, renkli animasyonlar ve kısa bekleme anı böylece güçlü beklenti sinyallerine dönüşebilir.</p>

<p>Önemli bir ayrım var: Dopamin, oyuncunun mutlaka bağımlı olduğu anlamına gelmez. Problemli davranış; kişisel yatkınlık, harcama kolaylığı, sosyal baskı, kayıp telafisi düşüncesi ve oyunun tasarımı gibi birçok etkenin birleşmesiyle gelişir.</p>

<h2 id="rastgeleliği-kodla-görmek">Rastgeleliği kodla görmek</h2>

<p>Aşağıdaki JavaScript örneği, yüzde 2 olasılıkla nadir eşya veren basit bir kutu sistemini simüle eder:</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">function</span> <span class="nf">kutuAc</span><span class="p">()</span> <span class="p">{</span>
  <span class="kd">const</span> <span class="nx">nadirlikOlasiligi</span> <span class="o">=</span> <span class="mf">0.02</span><span class="p">;</span>
  <span class="k">return</span> <span class="nb">Math</span><span class="p">.</span><span class="nf">random</span><span class="p">()</span> <span class="o">&lt;</span> <span class="nx">nadirlikOlasiligi</span>
    <span class="p">?</span> <span class="dl">'</span><span class="s1">Nadir eşya</span><span class="dl">'</span>
    <span class="p">:</span> <span class="dl">'</span><span class="s1">Sıradan eşya</span><span class="dl">'</span><span class="p">;</span>
<span class="p">}</span>

<span class="kd">let</span> <span class="nx">deneme</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="kd">let</span> <span class="nx">sonuc</span><span class="p">;</span>

<span class="k">do</span> <span class="p">{</span>
  <span class="nx">deneme</span><span class="o">++</span><span class="p">;</span>
  <span class="nx">sonuc</span> <span class="o">=</span> <span class="nf">kutuAc</span><span class="p">();</span>
<span class="p">}</span> <span class="k">while </span><span class="p">(</span><span class="nx">sonuc</span> <span class="o">!==</span> <span class="dl">'</span><span class="s1">Nadir eşya</span><span class="dl">'</span><span class="p">);</span>

<span class="nx">console</span><span class="p">.</span><span class="nf">log</span><span class="p">(</span><span class="s2">`Nadir eşya </span><span class="p">${</span><span class="nx">deneme</span><span class="p">}</span><span class="s2">. kutuda çıktı.`</span><span class="p">);</span>
</code></pre></div></div>

<p>Kod her çalıştırıldığında farklı sonuç üretir. Bu basit döngü, oyuncunun bir sonraki denemenin kazandırabileceği düşüncesiyle neden devam edebildiğini gösterir. Gerçek sistemlerde buna sınırlı süreli etkinlikler, yakın ıskalama efektleri ve ücretsiz başlangıç kutuları da eklenebilir.</p>

<h2 id="tasarım-ile-manipülasyon-arasındaki-çizgi">Tasarım ile manipülasyon arasındaki çizgi</h2>

<p>Rastgele ödüller başlı başına kötü değildir; sürpriz ve tekrar oynanabilirlik sağlayabilir. Risk, gerçek para harcamasının belirsiz sonuçlarla birleştiği ve olasılıkların gizlendiği noktada büyür. Etik bir sistem; çıkma oranlarını açıkça göstermeli, harcama sınırları sunmalı, çocukları korumalı ve belirli sayıda denemeden sonra garanti ödül veren <strong>pity sistemi</strong> kullanmalıdır.</p>

<p>İyi oyun tasarımı oyuncuyu eğlendirmeyi hedefler; karanlık tasarım ise bilişsel zayıflıkları gelir aracına dönüştürür. Bir sonraki kutu gerçekten efsanevi eşya içerebilir—butonu tıklamadan önce sorulması gereken soru şudur: Kararı ben mi veriyorum, yoksa belirsizlik mi?</p>]]></content><author><name>Sonsuz Us</name></author><category term="Bilgi" /><category term="değişken oran" /><category term="loot kutusu" /><category term="dopamin" /><category term="oyun tasarımı" /><category term="davranış bilimi" /><category term="bağımlılık mekanikleri" /><summary type="html"><![CDATA[Bir sandığı açıyorsunuz: sıradan bir kılıç. Bir tane daha: yine sıradan. Tam bırakacakken ekranda altın renkli bir parıltı beliriyor ve nadir karakter çıkıyor! Loot kutularının çekiciliği yalnızca ödülün kendisinden değil, ödülün ne zaman geleceğini bilememekten doğar. Değişken oran ödüllendirme adı verilen bu mekanik; oyun tasarımını, davranış psikolojisini ve beynin ödül öğrenme sistemini aynı noktada buluşturur.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://program.sonsuz.us/img/degisken-oran-odullendirme-90.png" /><media:content medium="image" url="https://program.sonsuz.us/img/degisken-oran-odullendirme-90.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></feed>