Ana içeriğe atla
🧭 Mutfak Rehberi

Diyet Skoru Nasıl Hesaplanır: Tarifle'nin Yöntemi ve Sınırları

Tarifle her tarife 0-100 arası diyet uyum skoru veriyor. 10 profil: dengeli, yüksek protein, düşük şeker, yüksek lif, Akdeniz, keto hassas. Skor neye göre çıkıyor, hangi profiller stable hangileri Beta, USDA verisi nasıl kullanılıyor? Yöntemi şeffaf anlatan rehber.

Tarifle Editörleri8 dk okuma

Bir tarif, bir kullanıcı için ne kadar uygun? Bu sorunun cevabı kullanıcıya bağlı. Vejetaryen biri için iyi olan tarif, yüksek protein arayan birine yetersiz gelebilir. Düşük şeker hedefli biri için sağlıklı görünen bir kek, kan şekerini hızla yükseltebilir.

Tarifle bu sorunu kullanıcıya bırakmadan, otomatik bir skor üretiyor: seçtiğin diyet profiline göre her tarife 0 ile 100 arası bir uyum puanı. Skor recipe kartında küçük bir chip, detay sayfasında detaylı bir kartla görünür. Yanında Beta etiketi var. Bu yazı skorun arkasındaki yöntemi, Beta etiketinin neden orada durduğunu, nereye kadar güvenebileceğini açıklar.

Skor neyi ölçüyor?

Diyet skoru bir tarifin sağlıklı olup olmadığını söylemiyor. "Düşük kalori" diyetiyle "yüksek protein" diyeti farklı şeyleri ödüllendirir. Aynı tarif birinde 92, diğerinde 35 alabilir. Skor "bu tarif senin seçtiğin diyete ne kadar uyuyor" sorusunun cevabı, mutlak bir kalite ölçüsü değil.

Şu an on diyet profili var, beşi macro veriyle stabil hesaplanıyor, beşi USDA besin değerleriyle çalışan Faz 2 profilleri.

Stable beş profil (porsiyon başı kalori/protein/karbonhidrat/yağ verisi yeterli):

  • Dengeli Beslenme: Protein %15-25, karbonhidrat %45-55, yağ %25-35 oranlı tabaklar
  • Yüksek Protein: Porsiyon başı 25g+ protein hedefli
  • Düşük Kalori: 350 kalori altı, doyurucu tarifler
  • Vejetaryen Dengeli: Et içermeyen + makro dengesi yerinde
  • Vegan Dengeli: Hayvansal ürün içermeyen + bitki proteini yeterli

USDA verisiyle çalışan beş profil (porsiyon başı şeker / lif / sodyum / doymuş yağ):

  • Düşük Şeker: Kan şekerini ani yükseltmeyen tarifler. Şeker miktarı USDA FoodData Central değerlerinden hesaplanır, ek olarak protein dengesi ve lif bonusu.
  • Yüksek Lif (Beta): 8g+ lif/porsiyon hedefli. Tam tahıl, baklagil, sebze ağırlıklı.
  • Düşük Sodyum (Beta): 600mg altı/porsiyon. Kalp sağlığı, hipertansiyon dostu. DASH diyet hedefine yakın.
  • Akdeniz Diyeti (Beta): Düşük doymuş yağ, yeterli lif, balanced macro, sebze ve zeytinyağı ağırlıklı.
  • Keto Hassas (Beta): Net karbonhidrat (toplam carb - lif) ≤10g/porsiyon, yağ kalori payı ≥%70.

Her profil için farklı kriterler farklı ağırlıklarla toplanır. Toplam her zaman 100 üzerinden hesaplanır.

Nasıl hesaplanıyor?

Skor açık kurallı bir motor üretir. Yapay zeka değil, deterministik matematik. Aynı tarif, aynı diyet, her zaman aynı skoru alır.

Her diyetin kendi kriter listesi var. Mesela "Yüksek Protein" için:

  • Protein miktarı (45 puan): Porsiyon başı 25g+ tam puan, altında lineer azalır
  • Protein yoğunluğu (25 puan): Kalori başına protein oranı düşük (≤12 kcal/g) iyi
  • Doyuruculuk (20 puan): Açlık skoru 5-10 arası ideal
  • Makul kalori (10 puan): 300-800 arası kalori

"Vejetaryen Dengeli" için kriterler değişir:

  • Vejetaryen uyumu (35 puan): Tarif et içermiyorsa tam puan, içiyorsa sıfır
  • Bitki proteini yeterli (25 puan): 15g+ protein
  • Makro denge (25 puan): Üç makroyu da hedef aralıkta tutmak
  • Kalori aralığı (15 puan): 300-700 kcal arası

Her kriter "smooth fit" denen yumuşak bir geçişle puanlanır. Hedef değere yaklaştıkça oran artar, hedefin ortasında tam puan, üstüne çıktıkça hafif ceza. Binary "geçti / kaldı" yerine "ne kadar yakın" sorgusu. Bu yaklaşım nutrient profiling literatüründe WHO'nun da önerdiği yöntem.

Skor 5 katmana bölünür:

  • 85-100: Mükemmel uyum
  • 70-84: İyi uyum
  • 50-69: Orta uyum
  • 30-49: Zayıf uyum
  • 0-29: Uyumsuz

Tarif kartında küçük bir renkli chip bu katmanları yansıtır: yeşil yüksek, sarı orta, kırmızı düşük.

Beta etiketi neden duruyor?

Beş profil "stable", beşi "Beta" etiketinde. Fark veri kapsamından geliyor.

Stable beş profilin (Dengeli, Yüksek Protein, Düşük Kalori, Vejetaryen Dengeli, Vegan Dengeli) ihtiyaç duyduğu veri zaten elimizde: porsiyon başı kalori, protein, karbonhidrat, yağ. Tariflerin %100'ünde bu veri var, skor güvenilir.

USDA verisiyle çalışan beş profilin ihtiyaç duyduğu veri ise daha derin: porsiyon başı şeker, lif, sodyum, doymuş yağ. Bu değerleri tariflerden değil, malzemelerden hesaplıyoruz. Her bir malzemenin USDA FoodData Central veritabanında karşılığını bulup, miktarına göre porsiyona düşeni topluyoruz.

Bu eşleme şu anda %86 tarifte yeterli. Top 80 en sık kullanılan malzemeyi USDA değerleriyle eşledik (zeytinyağı, un, soğan, yumurta, tavuk göğsü, mercimek, vb. ana kalemler). Eşleşmesi olmayan tariflerde skor "yaklaşık" olarak işaretleniyor; tarif detay sayfasında görünen "Diyet Uyumu" kartında veri eşleşme yüzdesi gösteriliyor.

Düşük Şeker profili biraz daha sağlam çünkü USDA verisi yoksa karbonhidrat oranı fallback proxy olarak kullanılıyor; bu yüzden Beta etiketinden çıkardık. Diğer dört USDA profili (Yüksek Lif, Düşük Sodyum, Akdeniz, Keto Hassas) henüz Beta'da çünkü onların proxy'si yok, eşleşmesi düşük tariflerde skor sıkıntılı çıkar.

Faz 2'nin sonraki adımı top 100-200 ingredient eşlemesi; eşleşme oranı %92+'ye çıkınca o dört etiket de düşer.

Veri tarafı: 80 ingredient, %86 kapsam

Tarifle'nin malzeme listesinde 1387 farklı ingredient adı var. En sık kullanılan 80'i top frekanslı: zeytinyağı, su, tereyağı, un, soğan, yumurta, tuz, süt, sarımsak, yoğurt, şeker, domates, patates, pirinç gibi ana kalemler kapatıldı. Bu 80 ingredient, RecipeIngredient tablosunun %85'ini oluşturuyor.

Her ingredient için saklanan değerler:

  • Per-100g kalori, protein, karbonhidrat, yağ
  • Per-100g şeker, lif, sodyum, doymuş yağ
  • Glisemik indeks (varsa)
  • Birim dönüştürme (1 yumurta = 50g, 1 su bardağı = 200ml)

Tarif aggregate hesabı şu adımları izliyor: malzeme listesi → her ingredient için NutritionData lookup → amount string'i ("1 su bardağı", "500 gr", "yarım çay kaşığı") gram değerine parse → per-100g değerleri × gram / 100 → toplam → porsiyon sayısına böl. Sonuç: porsiyon başı şeker / lif / sodyum / doymuş yağ.

Diğer bir nokta porsiyon hesabı. Tarifin 4 kişilik versiyonu ile 8 kişilik versiyonu arasında kalori başına protein oranı aynı kalsa da, mutlak değerler değişir. Skoru porsiyon başı hesaplıyoruz, tarif sayfasındaki "Kişi" değerine bağlı. Sayı yanlışsa skor da kayıyor. Tariflerin %95'inde porsiyon doğru ama hata payını sıfırlayamıyoruz.

Etiket retrofit'i ne yaptı?

İlk yayında "Vejetaryen Dengeli" skorunda fark ettik: vegetaryen tarifler %48'inde gerçekten vejetaryen tag'i vardı, geri kalanı et içermediği halde tag'lenmemişti. Bu durumda skor olduğundan düşük çıkıyordu. Sebep insan eli, bazı tariflerde tag eklenmemişti.

Çözüm otomatik bir kontrol oldu. Her tarifin malzeme listesini taradık, et / kümes hayvanı / balık / kabuklu deniz ürünü kalıplarına bakan bir motor yazdık. Bulamadığında o tarife vejetaryen tag'i ekledik. Aynı motor süt ürünü, yumurta ve balı da kontrol ediyor; hiçbiri yoksa vegan tag'i de ekleniyor. Bu işlem 1156 yeni tag attı.

Sonuç dağılımı:

  • Vejetaryen: %48 → %72
  • Vegan: %22 → %31

Bu otomatik tag ekleme yüzde yüz doğru değil. "Et suyu" gibi kısa kelimeler edge-case yaratıyor, manuel revizyon ileride yapılacak. Şimdilik agresif yerine dikkatli kalıp tutuyoruz: emin olmadığımızda tag eklemiyoruz. Yani hâlâ tag'i olmayan vejetaryen tarif vardır, ama tag olan tariflerin neredeyse hepsi gerçekten vejetaryen.

Skor neye göre güvenilir?

On profil iki güvenilirlik seviyesinde gruplanır.

Stable (mevcut veri yeterli, Beta etiketi yok):

  • Dengeli Beslenme
  • Yüksek Protein
  • Düşük Kalori
  • Vejetaryen Dengeli
  • Vegan Dengeli (B12 sinyali eksik, gelecek sürümde ek uyarı)
  • Düşük Şeker (USDA + carb fallback, %86 kapsama)

USDA verisi gerektiren, Beta:

  • Yüksek Lif
  • Düşük Sodyum
  • Akdeniz
  • Keto Hassas

Beta profilleri tariflerin %86'sında çalışıyor; eşleşme oranı düşük tariflerde detay sayfasındaki "Diyet Uyumu" kartı altında "%X eşleşme, sınırlı veri" uyarısı görünür. Üst seviyeye çıkarmak için ingredient kapsamını %92+'ye taşımak yeterli, sonraki USDA seed dalgasında (top 80 → top 130) etiket düşer.

Bu kademeli yaklaşımı seçmemizin sebebi yanlış sonucu doğru göstermekten kaçınmak. Bir kullanıcı "Düşük Sodyum" seçtiğinde sodyum eşleşmesi olmayan tarifte skor uydurmak yerine "%30 eşleşme, sınırlı veri" yazıp şeffaf kalmak daha doğru.

Sınırlar ve doğru kullanım

Skor bir öneri sistemi, tıbbi tavsiye değil. Diyabetik bir kullanıcı Glisemik İndeks tablosunu ve diyetisyenini skoru yerine ikame edemez. Bizim "Düşük Şeker" skorumuz porsiyon başı toplam karbonhidratı hesaba katar, hızlı sindirilen rafine şeker ile yavaş sindirilen tam tahıl arasındaki farkı tam ayırt edemez. Bu ayrımı Faz 2'de glikemik indeks katmanı ile getireceğiz.

Diğer sınırlar:

  • Kişiye özel kalori hesabı yok. "Düşük Kalori" 350 kcal eşiğini kabul ediyor; yaşam, kilo, aktivite seviyene göre senin için "düşük" eşiği farklı olabilir.
  • Gluten, laktoz, fındık gibi alerjenler diyet skoruna girmez. Onlar ayrı bir filtre, /tarifler sayfasında "alerjen hariç tut" seçeneğiyle çalışır.
  • Mikronutrient (vitamin, mineral) hesabı yok. Demir, B12, kalsiyum gibi değerler Faz 3'te skoru zenginleştirecek.

Genel kural, skoru "ipucu" olarak görmek. 90 alan bir tarif diyetine "uygun olabilir" diyor, "ye" demiyor. 30 alan bir tarif "diyetine uygun değil" diyor, "yeme" demiyor. Tek tip çıktıya değil, profilin yönüne bakmak iyi alışkanlık.

Skoru nasıl en iyi kullanılır?

Skoru aktif eden kullanıcı tariflere üç farklı yerden bakar: tarif kartında küçük bir chip, detay sayfasında detaylı bir kart, listeleme sayfasında sıralama tabı.

Tarif kartında: Sadece skoru ve renk seviyesini görürsün, hızlı keşif için. Listede gözüne yeşil bir tarif çarpıyorsa "bunu açıp daha detaylı bakayım" sinyali.

Detay sayfasında: 0-100 progress bar + her kriterin alt puanı. Niye skor düşük çıkmış, hangi kriter eksik, açıkça görürsün. "Vejetaryen olduğu için 35/35 aldı, ama protein 8g, hedef 15g, o yüzden 25/25 yerine 13/25" gibi.

Listeleme sayfasında: /tarifler adresine giderken sıralama seçeneklerinde "Diyetime uygun" yeni bir seçenek var (sadece diyet seçtiysen görünür). Tıklarsan tüm tarifler senin profiline göre yüksekten düşüğe sıralanır. Filtre seçimleri (kategori, mutfak, alerjen) bu sıralamayla birlikte çalışır.

AI Asistan'a malzeme listenle gittiğinde de aynı veri çalışır. Önerilen tarifin yanında küçük bir chip, "bu öneri diyetine ne kadar uyuyor" hızlı bir göz mesafesinden anlatır.

Şeffaflık ve geri bildirim

Skor algoritması açık. Eşikler, ağırlıklar, hesap mantığı kaynak kodda görünür ve GitHub'da yakında public açılacak. Bir tarifin skorunu fazla düşük ya da yüksek bulursan ayarlar sayfasında "Diyetimi değiştir" linki var, profilini geçici olarak değiştirip karşılaştırabilirsin.

İleriki sürümlerde geri bildirim formu ekleyeceğiz: "Bu skor sence uygun mu?" gibi tek tıklı bir kontrol. Cevaplar Faz 2 ve sonrası eşik ayarlarını kalibre etmemizi sağlayacak.

Şu an Beta'da olmasının pratik yansıması: skoru kullan, ama tek başına karar verici olarak kullanma. Tarifin malzeme listesine, kalori değerine, kendi tabağındaki dengeye bakmak da gerek.

İlgili Yazılar

Kaynaklar