Herkese açık bir reklam kütüphanesinden 300 rakip başlığı topladınız ve rakiplerin gerçekte hangi mesajları sattığını anlamak istiyorsunuz. En kolay yol, hepsini sohbet kutusuna yapıştırıp “Bu reklamların satış vaatlerini özetle” demektir. Yanıt da genellikle gecikmez: fiyat-performans vurgusu yapıyorlar, kullanıcı deneyimini öne çıkarıyorlar, aciliyet yaratıyorlar, pozitif ve duygusal bir ton kullanıyorlar. Tek bir reklamı okumadan da yazabileceğiniz dört cümle.
Veride sorun yok. Platformların reklam kütüphaneleri ve creative center'ları herkese açık; kendi hesabınızla gezebiliyor, hiçbir kısıtlamayı aşmıyorsunuz. Sorun, soruyu sorma biçiminizde. Modele toplu bir soru verdiğinizde, alabileceğiniz yanıt da toplu kalıyor. Üç yüz reklam dört sıfata sıkıştırıldığında bilgi kaybı kaçınılmaz; geriye doğru ama işe yaramaz genellemeler kalıyor.
Toplu metin analizinden fayda almak için önce “faydalı” çıktının ne olduğuna karar vermelisiniz. “Fiyat-performans vurgusu yapıyor” uygulanabilir bir içgörü değildir. Buna karşılık “Tasarruf vaadi, sayısal kanıt ve süre sınırı birlikte kullanılıyor; bu kombinasyon örneklemin %40'ında görülüyor ve fiyata duyarlı kitleye hitap ediyor” doğrudan aksiyona dönüşebilir. Bir sonraki kreatifinizde hangi değişkenleri ayarlayacağınızı söyler. Bu ikinci tür sonucu tek seferde alamazsınız; süreci iki aşamaya bölmeniz gerekir.
“Satış vaatlerini özetle” neden hep muğlak sonuç verir?
Tek seferlik yaklaşımın sorunu kötü yazılmış bir prompt değil, yöntemin yapısıdır.
Modelden aynı anda birbirinden farklı iki iş istiyorsunuz: Her reklamdan bilgi çıkarmak ve çıkarılan bilgileri sınıflandırmak. Bilgi çıkarma daha deterministiktir. Reklam hangi vaadi sundu, kanıt gösterdi mi; bu soruların yanıtları büyük ölçüde tektir. Sınıflandırma ise yorum gerektirir. Hangi vaatlerin aynı kategoriye girdiği ve sınırın nerede çizileceği muhakeme ister. İkisini tek çağrıya sıkıştırdığınızda model kestirme yola gider: Reklamları tek tek ayrıştırmak yerine metin duvarı hakkında genel bir izlenim üretir ve duymak istediğinizi varsaydığı olumlu sıfatları sıralar.
Tek aşamalı yöntemde ara çıktı da yoktur. Sonuç olarak “fiyat-performans vurgusu yapıyor” dersiniz ama bunun hangi reklamlara dayandığını, oranının ne olduğunu ya da karşı örnek bulunup bulunmadığını izleyemezsiniz. Yeni bir örneklemde tekrar çalıştırdığınızda sonuç değişir. Ara ürünü olmayan analiz ne denetlenebilir ne de geliştirilebilir.
Doğru akış: önce alanları çıkarın, sonra kümeleyin
Sağlam yöntem iki aşamalıdır ve arada yapılandırılmış alanlardan oluşan bir katman bulunur.
İlk aşamada her reklam metnini sabit bir şemaya göre ayrı ayrı işleyin. En az dört boyut kullanın: ana vaat, kanıt türü, aciliyet unsuru ve ima edilen hedef kitle. Bu adım her seferinde yalnızca bir reklama bakmalı; açıklama yazmadan, katı JSON üretmelidir.
You will receive one ad headline. Break it apart along the fixed fields below.
Output JSON only, no explanation.
<copy>
{{one piece of copy}}
</copy>
Fields and allowed values (pick only from the given enum; when unsure pick
unknown; do not invent values):
- promise: [save money, save time, look better, get healthier, make money,
learn a skill, belong, identity, unknown]
- evidence: [testimonial, data/numbers, authority, before/after, demo,
none, unknown]
- urgency: [time limit, scarcity, price-rise warning, fear of missing out,
none, unknown]
- audience: a short phrase, inferred from the wording, for who it's talking to
(e.g. "night owls", "moms with kids", "junior designers")
Output:
{"promise":"...","evidence":"...","urgency":"...","audience":"..."}
Üç yüz reklamı işlediğinizde elinizde üç yüz metin bloğu değil, üç yüz yapılandırılmış kayıt olur. Bu noktada “satış vaatlerini özetle” belirsiz bir anlamsal görev olmaktan çıkar; sayabileceğiniz, gruplayabileceğiniz ve dağılımını görselleştirebileceğiniz bir veri işine dönüşür.
İkinci aşama kümelemedir; fakat burada orijinal metinleri değil, alanları kümelersiniz. Ham metni kümelerseniz yine anlamsal benzerlik sisinin içine dönersiniz. Alanları kümelemek ise az sayıda ayrık boyut üzerinde, sınırları net gruplar oluşturur.
Kümeleme prompt'unda asıl farkı yaratan: karşı örnek şartı
Kümeleme prompt'undaki kritik ifade “bunları grupla” değildir. Asıl mesele, modeli karşı örnek getirmeye zorlamaktır.
Below are N ad headlines already extracted into structured records.
The categories are frozen. Do not add categories.
<records>
{{JSON array, each with promise/evidence/urgency/audience}}
</records>
Output three things in order:
1. Combination clustering
Group by (promise x evidence x urgency), and give each group's record
count and one representative sample.
2. Counterexample check
For the top 3 groups by record count, pick one record per group whose
audience clearly departs from the group's mainstream, and explain why it
got grouped there. Is it really the same selling point, or did step one
extract a field wrong?
3. Gaps
Which combinations that should be common don't appear even once in this
batch? Are those gaps "nobody's doing it" or "my sample didn't cover it"?
Bu prompt'un değerini ikinci bölüm yaratır. Model doğal olarak sizi memnun etmeye eğilimlidir; zorlamazsanız oluşturduğu her küme şüphe uyandıracak kadar tutarlı görünür. Modelden, bizzat oluşturduğu kümenin içine tam oturmayan bir kaydı bulup çıkarmasını istemek, “işim bitti” dediği noktadan sonra da kontrol etmesini sağlar. Böylece ya sınıflandırma sınırının fazla kaba olduğunu ya da ilk aşamada bir alanın yanlış çıkarıldığını görürsünüz.
Modelin kendi çıktısını kurcalamasını sağlama yöntemi yalnızca reklam analizi için geçerli değil. Kod tersine mühendisliğinde buna karşı kanıt bölümü denir: Model bir algoritma ailesini tanıdığında, bunu peşinen kabul etmez; “Standart uygulamadan nerede ayrılıyor?” sorusunu yanıtlamasını istersiniz. Gizlenmiş kodlarla çalışırken ve algoritma parmak izi çıkarırken modelin size katılma eğilimini sınırlayan da aynı ilkedir. Reklam metni kümelemesinde karşı örnek kontrolü, sizin karşı kanıt bölümünüzdür.
Her aşama için doğru model katmanı
Bu iki aşama modelden zıt yetenekler bekler. Bu yüzden ikisinde de aynı modeli kullanmak düpedüz israftır:
Aşama | Gerekli yetenek | Tercih | model id |
|---|---|---|---|
Reklam başına alan çıkarma (yüzlerce ila binlerce, her biri için ayrı çağrı) | Uygun maliyet, yüksek eşzamanlılık, kararlı yapılandırılmış çıktı | Claude Sonnet 5 |
|
Kategorileri belirleme (tüm örneklemi bir kez okuyup enum üretme) | Uzun bağlam | Kimi K3 |
|
Alanları kümeleme, karşı örnekler ve boşluklar | Güçlü muhakeme, kendi sonucunu sorgulama isteği | Claude Opus 5 |
|
Frekans atfı (yüksek sayı etkiden mi, kopyalama zincirinden mi kaynaklanıyor?) | Orta seviye muhakeme, veriye dayanarak açıklama | GPT-5.6 Sol |
|
Maliyetteki büyüklük mertebesindeki fark bu iş bölümünden gelir. Alan çıkarma, hacimle doğrusal büyüyen tek aşamadır: 300 reklam 300 çağrı, bin reklam bin çağrı demektir. Kümeleme ise her parti için yalnızca bir kez çalışır. En pahalı muhakeme katmanını bir veya iki kez çalışan kümelemeye, en ucuz katmanı yüzlerce kez çalışan çıkarmaya ayırırsanız toplam fatura on kat farklılaşır. Tersini yapıp pahalı katmanı alan çıkarmada, ucuz katmanı kümelemede kullanmak ise gördüğüm en yaygın israftır: Alan çıkarma o kadar yoğun muhakeme gerektirmez; kümeleme de ucuz katmanın en zayıf kaldığı yerde çöker.
Katman düşürmenin ne kadar tasarruf sağladığını benim sözüme bırakmayın; tek tur test edin:
Topladığınız reklamlardan 20 ila 30 tanesini seçin.
Alanları çıkarın: Aynı partiyi
claude-sonnet-5veclaude-opus-5üzerinden çalıştırın; dört alanı kayıt kayıt karşılaştırarak ne kadar uyuştuklarına bakın.Kümeleme yapın: Aynı yapılandırılmış kayıtları iki katmanda da kümeleyin ve iki noktayı inceleyin. Karşı örnek kontrolü gerçekten kümeleri zorluyor mu, yoksa yalnızca adayı yeniden mi anlatıyor? Boşluklar uygulanabilir bir sonraki adım gösteriyor mu?
Sonuç doğrudan okunur: Alan çıkarma uyumu yüksekse bu adımı ucuz katmana indirin ve tasarruf edin; ucuz katman kümelemede faydalı bir karşı örnek üretemiyorsa, o aşama muhakeme katmanında kalmalıdır.
Tuzak 1: Modelin kategorileri kendisinin belirlemesine izin vermek
En kolay düşülen hata, alan çıkarma sırasında enum vermemek ve kategorileri modelin icat etmesine izin vermektir.
İlk partide her şey iyi görünür. Model kulağa makul gelen kategori setleri üretir. Sorun ikinci partide ortaya çıkar: Metin türü aynıdır ama kategori adları değişmiştir, ayrıntı seviyesi kaymıştır, sınırlar yer değiştirmiştir. Eğilim görmek için iki partiyi yan yana koyarsınız ve hiçbir şeyin eşleşmediğini fark edersiniz. İlk partideki “discount”, ikinci partideki “save money” ile aynı mı? Kimse bilemez. Kategoriler her partide sürükleniyorsa, partiler arası karşılaştırma tamamen yanıltıcıdır.
Çözüm, kategori belirlemeyi kategorileri kullanmaktan ayırmaktır. Önce uzun bağlam katmanıyla geniş bir örneklem grubunu tek seferde okutun; bu, yüzlerce örneği aynı anda işleyebilen uzun bağlamın tam işidir. Ardından kapsamlı ve ayrıntı seviyesi tutarlı bir enum seti oluşturun, bunu elle gözden geçirip sabitleyin. Bundan sonra tüm çıkarma işlemleri yalnızca sabit enum içinden seçim yapmalı; kapsayıcı seçenek olarak unknown kullanılmalı ve anlık yeni kategori türetilmemelidir. Çıkarma prompt'undaki “pick only from the given enum, do not invent” satırı bu kısıtın somut karşılığıdır.
Tek cümleyle: Kategorileri siz belirlersiniz, model yalnızca kutuları doldurur.
Tuzak 2: Frekansı etkililik sanmak
Alanları çıkarıp kümeleri oluşturduktan sonra kayıt sayısına göre sıralamak ve en sık görülen satış vaadini “en etkili” kabul etmek çok doğal gelir. Ancak bu adım, fark edilmesi zor bir şekilde yanlıştır.
Yüksek frekans yalnızca “herkes bunu böyle yazıyor” demektir. “Bunu böyle yazmak işe yarıyor” anlamına gelmez. Reklamcılıkta kopyalama zinciri gerçektir: Bir reklam tutar, bir hafta içinde tüm alan o mesaja yüklenir ve creative center'da bir gecede onlarca benzer başlık belirir. Frekans sayınız bütün bu kopyacıları dahil edip “bu satış vaadi en popüler olanı” sonucuna varır. Oysa bunların tamamı birlikte kötü performans gösteriyor olabilir; kimse durup bakmamıştır. Frekans uyumu ölçer, etkiyi değil.
Frekansı etkililikten ayırmak için her kayda etki verisi eklemelisiniz. Herkese açık reklam kütüphanelerindeki kreatiflerde oynatma sayısı, beğeni, CTR ve benzeri alanlar bulunur. Aslında sıralamanız gereken şey ham kayıt sayısı değil, “belirli bir satış vaadi kombinasyonunun yüksek performans yüzdelimine giren payı” olmalıdır. Saniye saniye izlenme tutma verisini ve CTR yüzdelimlerini anlamlı sinyale dönüştürmeyi başka bir yazıda ele aldım. Burada vurgulamak istediğim nokta şu: Frekans tablosu ile etki tablosu iki ayrı tablo olmalı; bunları tek tabloda birleştirdiğiniz anda sonuç bozulur.
Bu aşamada modelin görevi sıralama değil, atıftır. Yüksek frekanslı bir kombinasyonu etki dağılımıyla birlikte orta muhakeme katmanına verin ve “Bu frekans işe yaradığı için mi yüksek, yoksa herkes birbirini kopyaladığı için mi?” diye sorun. Modelden yanıtını sayılara dayandırmasını isteyin. Atfı yanlış yapsa bile maliyeti düşüktür; nihayetinde gerçek etki verisiyle doğrulama yaparsınız.
Tuzak 3: Sadece kazananları analiz etmek
Üçüncü tuzak veri kaynağında gizlidir ve dikkat etmezseniz hiç görünmez: Reklam kütüphaneleri ile creative center'lar varsayılan olarak iyi performans gösteren reklamları önünüze çıkarır. “Hot ads” veya “Top Ads” gibi listeler, özünde platformun performansa göre önceden filtrelediği hayatta kalan reklamlardır.
Kazananlardan oluşan bir küme üzerinde çalışır, “başarılı reklamların ortak özelliklerini” bulur ve onları kopyalarsınız. Bu, klasik bir hayatta kalma yanlılığıdır; çünkü başarısız reklamların da aynı özellikleri taşıması çok muhtemeldir. Diyelim ki kazananların %90'ı “time limit” kullandı ve siz buradan “süre sınırları işe yarıyor” sonucunu çıkardınız. Ancak başarısız reklamların da %90'ı süre sınırı kullanmışsa, bu özelliğin ayırt edici hiçbir gücü yoktur. Bu yalnızca sektör standardıdır; başarıyla veya başarısızlıkla ilişkili değildir.
Çözüm, kazananlara bir kontrol grubu eklemektir. Herkese açık reklam kütüphaneleri genellikle sektör, pazarlama hedefi ve zaman aralığına göre filtreleme sunar. Aynı filtrelerle gösterim alan ama etkileşimi belirgin biçimde düşük kreatiflere ulaşın; onları da çıkarıp kümeleyin ve kazanan grubunun yanına koyun. Değerli olan “kazananlarda ne var?” sorusu değil, “kazananlarda olup kaybedenlerde olmayan ne var?” sorusunun fark kümesidir. Bir sonraki kreatifinize yalnızca bu fark kümesinde görünen özellikleri yazmaya değer.
Eksiksiz bir kaybeden örneklemi elde edemezsiniz; bu sorun değil. Küçük bir düşük performanslı kontrol grubu bile yalnızca Top Ads üzerinden çıkarılan sonuçtan çok daha güvenilirdir.
Çıktı özet değil, değişken tablosu olmalı
İki aşamayı uygulayıp üç tuzaktan kaçındığınızda, nihai ürün “bu partideki rakipler XX'i öne çıkarıyor” diyen bir paragraf olmamalıdır. Bu, sizi yeniden muğlak genellemelere döndürür. Ortaya çıkması gereken ürün bir değişken tablosudur:
Her boyutun hangi değerleri aldığı: vaat, kanıt, aciliyet ve hedef kitle.
Hangi kombinasyonların etkili olduğu zaten doğrulanmış: fark kümesinde yer alan ve performans yüzdelimi yüksek kombinasyonlar.
Henüz kimsenin denemediği kombinasyonlar: boşluklar bölümünden çıkarılanlar.
Bu tablo doğrudan bir üretim görevinin girdisi olabilir. Etkisi doğrulanmış kombinasyonlarla toplu varyasyonlar üretirsiniz; boş kombinasyonları ise düşük maliyetli denemeler için kullanırsınız. Reklam metni boyutundaki değişkenler senaryo yazması için bir metin modeline, görsel ve ton değişkenleri kreatif üretmesi için görüntü ve video modellerine gider. Böylece rakip metninden kendi tamamlanmış reklamınıza uzanan hat kapanır. Bu değişken tablosu, kreatif üretim hattındaki brief aşamasının tam olarak okuduğu girdidir.
Kümelemenin amacı şık bir sınıflandırma grafiği üretmek değildir. Amaç, bir sonraki üretim partisini yönlendirecek bu tabloyu oluşturmaktır.
Dört katmana tek anahtarla erişin
Yukarıdaki akış dört katman gerektirir: Alan çıkarma için ucuz ve yüksek eşzamanlı katman, kategorileri belirlemek için uzun bağlam katmanı, kümeleme için muhakeme katmanı ve atıf için orta muhakeme katmanı. Bunlar farklı sağlayıcılardan gelir; SDK'ları, kimlik doğrulama yöntemleri ve hata formatları da farklıdır. Yalnızca aşamalar arasında model değiştirmek için istemcinizi birden fazla arayüze bağlamak çoğu zaman değmez. İnsanların her iş için tek modele yönelmesinin asıl nedeni budur; ardından da daha önceki israfa düşerler: Ya pahalı katman alan çıkarmada para yakar ya da ucuz katman kümelemede karşı örnek üretemez.
AIReiter bu katmanı sadeleştirir: Tek anahtar, OpenAI uyumlu tek arayüz ve arkasında dört katman. İstek gövdesindeki model alanını değiştirmeniz yeterlidir.
# Extract fields: the cheap high-concurrency tier
curl https://aireiter.com/api/v1/chat/completions \
-H "Authorization: Bearer $AIREITER_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5",
"messages": [{"role": "user", "content": "<extraction prompt + one piece of copy>"}]
}'
# Cluster: switch to the reasoning tier, leave the rest
# "model": "claude-opus-5"
# Frequency attribution:
# "model": "gpt-5.6-sol"
Halihazırda OpenAI SDK kullanıyorsanız base_url değerini https://aireiter.com/api/v1 olarak ayarlayın; başka hiçbir şeyi değiştirmeniz gerekmez. Anthropic SDK tarafında ise aynı anahtarla POST /api/v1/messages çağrısını kullanın.
Fiyat tarafında Claude modeller liste fiyatına göre %30 indirimli, GPT modeller ise yarı fiyatına çalışır; indirim bu akışın ana maliyet kalemine doğrudan yansır. Alan çıkarma, hacimle doğrusal büyüyen tek aşamadır: 300 reklam 300 çağrı, bin reklam bin çağrı demektir. Bu iş en ucuz Sonnet katmanında, üzerine %30 indirimle yürür; tasarrufun büyük bölümü buradan gelir. Kümeleme ve atıf her parti için yalnızca birkaç kez çalıştığından, burada muhakeme katmanı kullanmak maliyeti zorlamaz. Kategorileri belirleme ise aynı anahtar üzerinden erişilebilen uzun bağlamlı Kimi K3 ile parti başına bir kez yapılır.
Kayıt olmadan deneyin: Önce birkaç reklamı elle çalıştırın; alan çıkarma uyumunda ve kümeleme karşı örneklerinde ucuz katmanla muhakeme katmanını karşılaştırın. Sonuç tutarlı hale geldiğinde otomasyona geçin.
Sonuç
Toplu reklam metni analizinin muğlak sonuç vermesinin nedeni modelin zayıf olması değil; alan çıkarma ile sınıflandırmayı tek çağrıya sıkıştırmanızdır.
Süreci ikiye ayırın: Sabit bir enum üzerinden her reklamdan yapılandırılmış alanları çıkarın, bunu ucuz katmanda yüzlerce kez çalıştırın. Ardından alanları kümeleyin ve modeli karşı örnek getirmeye zorlayın; bu aşamayı muhakeme katmanında bir kez çalıştırın. Üç tuzağı da sürekli izleyin: Modelin anlık kategori icat etmesine izin vermeyin, frekansı etkililik diye okumayın, kazananlara bir kontrol grubu ekleyin. Sonunda “fiyat-performans vurgusu yapıyor” gibi bir cümleye değil, sonraki üretim partinizi yöneten bir değişken tablosuna ulaşın.
Bu akışta model aslında iki ayrı araçtır: Ucuz bir çıkarıcı ve kendi sonucunu sorgulamaya istekli bir sınıflandırıcı. Bunları doğru katmanlarda, ayrı ayrı kullanırsanız birkaç yüz reklamdan uygulanabilir içgörü çıkarırsınız. Her şeyi tek modele yüklerseniz elinizde yalnızca sıfatlar kalır.