Gerçek zamanlı cihaz içi Uygulama içi satın alma optimizasyonu Codelab

1. Genel Bakış

1cbf855eda62c306.png

Gerçek zamanlı cihaz içi uygulama içi satın alma optimizasyonu kod laboratuvarına hoş geldiniz. Bu codelab'de uygulamanıza özel bir kişiselleştirme modeli eğitmek ve dağıtmak için TensorFlow Lite ve Firebase'i nasıl kullanacağınızı öğreneceksiniz.

Bu eğitimde, kişiselleştirme için, özellikle mevcut kullanıcının içinde bulunduğu durum göz önüne alındığında en uygun uygulama içi satın alma (IAP) teklifini tahmin eden bir makine öğrenimi modelinin nasıl oluşturulacağı gösterilmektedir. Bu, önemli ve önemli bir bağlamsal haydut sorununun örneğidir. Bu codelab'de hakkında daha fazla bilgi edineceğiniz, yaygın olarak uygulanabilir türde bir makine öğrenimi problemi

Ne öğreneceksin

  • Firebase analitiği aracılığıyla analiz verilerini toplayın
  • BigQuery'yi kullanarak analiz verilerini ön işleme
  • Uygulama içi satın almaların (IAP'ler) cihaz üzerinde optimizasyonu için basit bir makine öğrenimi modeli eğitin
  • TFLite modellerini Firebase ML'ye dağıtın ve bunlara uygulamanızdan erişin
  • Firebase A/B Testi aracılığıyla farklı modelleri ölçün ve deneyin
  • Tekrarlanan bir tempoda en son verileri kullanarak yeni modelleri eğitin ve dağıtın

İhtiyacınız olan şey

  • Android Studio sürüm 3.4+
  • Android 2.3+ ve Google Play hizmetleri 9.8 veya sonraki sürümlere sahip bir fiziksel test cihazı ya da Google Play hizmetleri 9.8 veya sonraki sürümlere sahip bir Emülatör
  • Fiziksel bir test cihazı kullanılıyorsa, bir bağlantı kablosu
  • Acemi makine öğrenimi bilgisi

Bu öğreticiyi nasıl kullanacaksınız?

Yalnızca baştan sona okuyun Okuyun ve alıştırmaları tamamlayın

Android uygulamaları oluşturma deneyiminizi nasıl değerlendirirsiniz?

Acemi Orta seviye Yetkin

2. Sorun Bildirimi

Her seviyenin sonunda kişiselleştirilmiş uygulama içi satın alma (IAP) önerileri göstermek isteyen bir oyun geliştiricisi olduğunuzu varsayalım. Her seferinde yalnızca sınırlı sayıda IAP seçeneği gösterebilirsiniz ve hangilerinin en iyi dönüşümü sağlayacağını bilemezsiniz. Her kullanıcının ve her oturumun farklı olduğu göz önüne alındığında, beklenen en yüksek ödülü veren IAP teklifini nasıl bulacağız?

3. Örnek kodu alın

GitHub deposunu komut satırından kopyalayın.

git clone https://github.com/googlecodelabs/firebase-iap-optimization.git

Bu depo şunları içerir:

  1. Kişiselleştirme modelini eğiten ve onu bir TFLite modelinde paketleyen bir Jupyter not defteri (.ipynb)
  2. Cihazda tahminlerde bulunmak için TFLite modelini kullanan örnek bir Kotlin uygulaması

4. Uygulamayı Firebase ile çalıştırın

Bu codelab'de kurgusal oyun uygulamamız Flappy Sparky'nin IAP'lerini optimize etmeye çalışacağız. Oyun, oyuncunun bir Sparky'yi kontrol ettiği ve duvar sütunları arasında onlara çarpmadan uçmaya çalıştığı bir yan kaydırma oyunudur. Seviyenin başında kullanıcıya, kendisine güç verecek bir IAP teklifi sunulur. Bu codelab'de uygulamanın yalnızca IAP optimizasyon bölümünü uygulayacağız.

Burada öğrendiklerinizi bir Firebase projesine bağlı kendi uygulamanıza uygulayabileceksiniz. Alternatif olarak bu codelab için yeni bir Firebase projesi oluşturabilirsiniz. Firebase'i kullanmaya başlama konusunda yardıma ihtiyacınız varsa lütfen bu konudaki eğitimlerimize bakın ( Android ve iOS ).

5. Uygulamanızda analiz etkinliklerini toplayın

Analytics olayları, kullanıcı davranışına ilişkin öngörü sağlar ve ML modelini eğitmek için kullanılır. Örneğin model, daha uzun süre oynayan kullanıcıların ekstra can kazanmak için IAP yapma olasılığının daha yüksek olduğunu öğrenebilir. ML modelinin bu bilgiyi öğrenmek için girdi olarak analiz olaylarına ihtiyacı vardır.

Günlüğe kaydetmek isteyebileceğimiz bazı analiz etkinlikleri şunları içerir:

  • Kullanıcının oyunu ne kadar süre oynadığı
  • Kullanıcının hangi seviyeye ulaştığı
  • Kullanıcının harcadığı para miktarı
  • Kullanıcının hangi ürünleri satın aldığı

Örnek verileri indirin (İsteğe bağlı)

Aşağıdaki adımlarda, modelimizde kullanılacak analiz olaylarını günlüğe kaydetmek için Firebase Analytics'i kullanacağız. Zaten kullanmak istediğiniz analiz verileriniz varsa bu codelab'in "Optimizasyon modelini eğitme" bölümüne geçin ve örnek verilerimizi takip edebilirsiniz.

Firebase Analytics SDK'sıyla Veri Toplayın

Bu analiz etkinliklerinin toplanmasına yardımcı olması için Firebase Analytics'i kullanacağız. Firebase Analytics SDK'sı bir dizi etkinliği ve kullanıcı özelliğini otomatik olarak yakalar. Ayrıca uygulamanıza özgü etkinlikleri ölçmek için kendi özel etkinliklerinizi tanımlamanıza da olanak tanır.

Firebase Analytics SDK'yı yükleme

Google Analytics'e Başlayın belgelerini takip ederek uygulamanızda Firebase Analytics'i kullanmaya başlayabilirsiniz. Bu codelab'in başında klonlanan firebase-iap-optimization deposu zaten Firebase Analytics SDK'sını içeriyor.

Özel etkinlikleri günlüğe kaydet

Firebase Analytics SDK'yı kurduktan sonra modelimizi eğitmek için ihtiyacımız olan olayları kaydetmeye başlayabiliriz.

Bunu yapmadan önce, analiz etkinliğinde bir kullanıcı kimliği belirlemek önemlidir; böylece söz konusu kullanıcıya ait analiz verilerini, uygulamadaki mevcut verilerle ilişkilendirebiliriz.

MainActivity.kt

firebaseAnalytics.setUserId("player1")

Daha sonra oyuncu etkinliklerini günlüğe kaydedebiliriz. IAP optimizasyonu için, kullanıcıya sunulan her IAP teklifini ve bu teklifin kullanıcı tarafından tıklanıp tıklanmadığını kaydetmek istiyoruz. Bu bize iki analiz olayı verecektir - offer_iap ve offer_accepted . Ayrıca benzersiz bir teklif_id'sini de takip edeceğiz, böylece daha sonra bir teklifin kabul edilip edilmediğini görmek amacıyla bu verileri birleştirmek için bunu kullanabiliriz.

MainActivity.kt

predictButton?.setOnClickListener {
  predictionResult = iapOptimizer.predict()

  firebaseAnalytics.logEvent("offer_iap"){
    param("offer_type", predictionResult)
    param("offer_id", sessionId)
  }
}

acceptButton?.setOnClickListener {
  firebaseAnalytics.logEvent("offer_accepted") {
    param("offer_type", predictionResult)
    param("offer_id", sessionId)
  }
}

Özel etkinlikleri günlüğe kaydetme hakkında daha fazla bilgi için Firebase Analytics Günlük Olayları belgelerini ziyaret edin.

6. BigQuery'de verileri ön işleme

Son adımda kullanıcıya hangi IAP teklifinin sunulduğu ve kullanıcı tarafından hangi IAP teklifinin tıklandığı ile ilgili olayları topladık. Bu adımda, modelimizin tam bir resimden öğrenebilmesi için bu etkinlik verilerini kullanıcı verileriyle birleştireceğiz.

Bunu yapmak için analiz etkinliklerini BigQuery'ye aktararak başlamamız gerekecek.

Firebase projenizi ve uygulamalarını BigQuery'ye bağlamak için:

  1. Firebase'de oturum açın.
  2. Tıklamak the Settings icon ve ardından Proje Ayarları'nı seçin.
  3. Proje Ayarları sayfasında Entegrasyonlar sekmesine tıklayın.
  4. BigQuery kartında Bağlantı'ya tıklayın.

(İsteğe bağlı) Firestore koleksiyonlarınızı BigQuery'ye aktarın

Bu adımda, modelin eğitilmesine yardımcı olması amacıyla ek kullanıcı verilerini Firestore'dan BigQuery'ye aktarma seçeneğiniz vardır. Şimdilik bu adımı atlamak istiyorsanız bu codelab'in "BigQuery'de veri hazırlama" bölümüne geçin ve son adımda kaydedilen Firebase Analytics etkinliklerini takip edebilirsiniz.

Firestore, kullanıcıların kayıt tarihini, yapılan uygulama içi satın alma işlemlerini, oyundaki seviyeleri, bakiyedeki paraları veya modelin eğitilmesinde yararlı olabilecek diğer özellikleri depoladığınız yer olabilir.

Firestore koleksiyonlarınızı BigQuery'ye aktarmak için Firestore BigQuery Export Uzantısını yükleyebilirsiniz. Ardından, kişiselleştirme modelinizde ve bu codelab'in geri kalanında kullanmak üzere bu verileri Google Analytics verileriyle birleştirmek için BigQuery'deki tabloları birleştirin .

BigQuery'de veri hazırlama

Sonraki birkaç adımda ham analiz verilerimizi modelimizin eğitimi için kullanılabilecek verilere dönüştürmek için BigQuery'yi kullanacağız.

Modelimizin kullanıcıya ve oyun durumuna göre hangi IAP teklifini sunacağını öğrenmesi için aşağıdakilerle ilgili verileri düzenlememiz gerekiyor:

  • Kullanıcı
  • oyun durumu
  • sunulan teklif
  • sunulan teklifin tıklanıp tıklanmadığı

Modelimizin işleyebilmesi için tüm bu verilerin bir tabloda tek bir satırda düzenlenmesi gerekecektir. Neyse ki BigQuery tam da bunu yapmamıza yardımcı olacak şekilde kuruldu.

BigQuery, sorgunuzu düzenli tutmak için "görünümler" oluşturmanıza olanak tanır. Görünüm, bir SQL sorgusu tarafından tanımlanan sanal bir tablodur. Bir görünüm oluşturduğunuzda, onu bir tabloyu sorguladığınız gibi sorgularsınız. Bunu kullanarak ilk önce analitik verilerimizi temizleyebiliriz.

Her uygulama içi satın alma teklifinin tıklanıp tıklanmadığını görmek için önceki adımda oturum açtığımız offer_iap ve offer_accepted etkinliklerine katılmamız gerekecek.

all_offers_joined - BigQuery görünümü

SELECT
  iap_offers.*,
  CASE
    WHEN accepted_offers.accepted IS NULL THEN FALSE ELSE TRUE
  END
  is_clicked,
FROM
  `iap-optimization.ml_sample.accepted_offers` AS accepted_offers
RIGHT JOIN
  `iap-optimization.ml_sample.iap_offers` AS iap_offers
ON
 accepted_offers.offer_id =iap_offers.offer_id;

all_offers_with_user_data - BigQuery görünümü

SELECT
  offers.is_clicked,
  offers.presented_powerup,
  offers.last_run_end_reason,
  offers.event_timestamp,
  users.*
FROM
  `iap-optimization.ml_sample.all_offers_joined` AS offers
LEFT JOIN
  `iap-optimization.ml_sample.all_users` AS users
ON
  users.user_id = offers.user_id;

BigQuery veri kümesini Google Cloud Storage'a aktarın

Son olarak bigquery veri setini GCS’ye aktarıp model eğitimimizde kullanabiliriz.

888daa7ba4db8e44.png

14d22bf474fae455.png

7. Optimizasyon modelini eğitin

Örnek veri

Bu codelab'in geri kalanıyla birlikte takip etmek için "BigQuery'de verileri ön işleme" adlı önceki adımdaki verilerinizi veya burada sağlanan indirilebilir örnek verileri kullanın.

Problem tanımı

Modeli eğitmeye başlamadan önce, bağlamsal eşkıya sorunumuzu tanımlamaya biraz zaman ayıralım.

Bağlamsal haydutlar açıklandı

Flappy Sparky'de her seviyenin başında kullanıcıya, kendisine güç kazandıracak bir IAP teklifi sunulur. Her seferinde yalnızca bir IAP seçeneği gösterebiliyoruz ve hangilerinin en iyi dönüşümü sağlayacağını bilmiyoruz. Her kullanıcının ve her oturumun farklı olduğu göz önüne alındığında, beklenen en yüksek ödülü veren IAP teklifini nasıl bulacağız?

Bu durumda kullanıcı IAP teklifini kabul etmezse ödülü 0, kabul ederse IAP değerini yapalım. Ödülünüzü en üst düzeye çıkarmaya çalışmak için, kullanıcıya verilen her eylem için beklenen ödülü tahmin eden bir model eğitmek ve en yüksek ödüle sahip eylemi bulmak için geçmiş verilerimizi kullanabiliriz.

e7d3264141498bff.jpeg

Tahminde kullanacağımız şey şudur:

  • Durum: kullanıcı ve mevcut oturumu hakkında bilgi
  • Eylem: Göstermeyi seçebileceğimiz IAP teklifleri
  • Ödül: IAP teklifinin değeri

Sömürü ve Keşif

Tüm çok kollu haydut sorunları için, algoritmanın keşif (hangi eylemin en iyi sonucu verdiğini öğrenmek için daha fazla veri elde etmek) ile istismar (en yüksek ödülü elde etmek için en iyi sonucu kullanmak) arasında denge kurması gerekir.

Sorunun bizim versiyonumuzda, modeli yalnızca periyodik olarak bulutta eğitmek ve yalnızca modeli kullanıcının cihazında kullanırken (kullanıcının cihazında eğitimin aksine) tahminler yapmak için bunu basitleştireceğiz. Modeli kullandıktan sonra yeterli eğitim verisine sahip olduğumuzdan emin olmak için bazen uygulama kullanıcılarımıza rastgele sonuçlar göstermemiz gerekir (örneğin %30). Keşif ve sömürüyü dengelemeye yönelik bu stratejiye Epsilon açgözlülüğü denir.

Modeli eğitmek

Başlamak için codelab ile birlikte sağlanan eğitim komut dosyasını ( training.ipynb ) kullanabilirsiniz. Amacımız, belirli bir durum için her eylem için beklenen ödülleri tahmin eden bir model geliştirmek, ardından bize beklenen en yüksek ödülleri veren eylemi bulmaktır.

Yerel olarak eğitim

Kendi modelinizi eğitmeye başlamanın en kolay yolu, bu codelab için kod örneğindeki not defterinin bir kopyasını oluşturmaktır.

Bu codelab için GPU'ya ihtiyacınız yok ancak kendi verilerinizi keşfetmek ve kendi modelinizi eğitmek için daha güçlü bir makineye ihtiyacınız varsa eğitiminizi hızlandırmak için bir AI Platform Notebook örneği alabilirsiniz.

Sağlanan eğitim komut dosyasında BigQuery'den dışa aktardığımız CSV dosyalarından eğitim verileri üreten bir yineleyici oluşturduk. Daha sonra modelimizi Keras ile eğitmeye başlamak için verileri kullandık. Modelin nasıl eğitileceğine ilişkin ayrıntılar Python not defterinin yorumlarında bulunabilir.

Model performansını ölçün

Modeli eğitirken, modelimizin gerçekten öğrenip öğrenmediğini görmek için onu IAP tekliflerini rastgele seçen rastgele bir aracıyla karşılaştıracağız. Bu mantık ValidationCallback altında yaşar .

Eğitimin sonunda modelimizi tekrar test etmek için test.csv verileri kullanıyoruz. Model bu verileri daha önce hiç görmediğinden sonucun aşırı uyumdan kaynaklanmadığından emin olabiliriz. Bu durumda model rastgele ajana göre %28 daha iyi performans göstermektedir.

TFLite modelini dışa aktarma

Şu anda TensorFlow formatında olması dışında, artık kullanıma hazır eğitimli bir modelimiz var. Mobil cihazlarda çalıştırılabilmesi için modeli TFLite formatında dışa aktarmamız gerekecek.

tren.ipynb

converter = tflite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()

with tf.io.gfile.GFile('iap-optimizer.tflite', 'wb') as f:
  f.write(tflite_model)

Buradan modeli indirebilir ve modeli uygulamanızla birlikte paketleyebilirsiniz.

İsteğe bağlı olarak, bir üretim uygulaması için modeli Firebase ML'ye dağıtmanızı ve modelinizi Firebase'in barındırmasını öneririz. Bu iki ana nedenden dolayı faydalıdır:

  1. Uygulama yükleme boyutunu küçük tutabilir ve modeli yalnızca ihtiyaç duyulduğunda indirebiliriz
  2. Model düzenli olarak ve uygulamanın tamamından farklı bir sürüm döngüsüyle güncellenebilir

Modeli Firebase ML'ye nasıl dağıtacağınızı öğrenmek için Firebase'i TFLite destekli Android Uygulama kod laboratuvarınıza ekleme bölümünü takip edebilirsiniz. Firebase konsolunu veya Python API'sini kullanarak dağıtım yapma seçeneğiniz vardır.

8. Cihaz üzerinde tahminlerde bulunmak

Bir sonraki adım, cihazdaki modeli kullanarak tahminler yapmaktır. İndirdiğiniz örnek kodun app klasöründe Firebase ML'den model indiren örnek bir uygulama bulabilir ve bunu bazı istemci tarafı verilerle çıkarım yapmak için kullanabilirsiniz.

Model eğitimi sırasında bazı ön işlemeler uyguladığımız için, aynı ön işlemeyi cihazda çalıştırırken model girişine de uygulamamız gerekecek. Bunu yapmanın basit bir yolu, ön işlemenin nasıl yapıldığına ilişkin meta verilere kadar her özelliğin haritasını içeren JSON dosyası gibi platformdan ve dilden bağımsız bir format kullanmaktır. Örnek uygulamada bunun nasıl yapıldığına ilişkin daha fazla ayrıntı bulabilirsiniz.

Daha sonra modele aşağıdaki gibi bir test girişi veriyoruz:

IapOptimzer.kt

  val testInput = mapOf(
    "coins_spent" to                       2048f,
    "distance_avg" to                      1234f,
    "device_os" to                         "ANDROID",
    "game_day" to                          10f,
    "geo_country" to                       "Canada",
    "last_run_end_reason" to               "laser"
  )

Model, sparky_armor bu kullanıcı için en iyi IAP güçlendirmesi olduğunu öne sürüyor.

a3381dbcdbdf811e.png

Model doğruluğunu ölçün

Modelimizin doğruluğunu ölçmek için, modelimiz tarafından tahmin edilen IAP tekliflerini ve Firebase Analytics kullanılarak bunlara tıklanıp tıklanmadığını takip edebiliriz. Modelin gerçek performansını ölçmek için bunu Firebase A/B testiyle birlikte kullanabilirsiniz. Bir adım daha ileri giderek, modelin farklı yinelemelerinde A/B testleri de gerçekleştirebilirsiniz. Firebase ile A/B testi hakkında daha fazla bilgiyi A/B Testi ile Firebase Uzaktan Yapılandırma Deneyleri Oluşturma belgelerinde bulabilirsiniz.

9. (İsteğe Bağlı): Modelin düzenli olarak yeni verilerle güncellenmesi

Yeni veriler geldikçe modelinizi güncellemeniz gerekiyorsa modelinizi düzenli aralıklarla yeniden eğitmek için bir işlem hattı oluşturabilirsiniz. Bunu yapmak için öncelikle yukarıda bahsettiğimiz epsilon açgözlü stratejisini kullanarak eğitim için kullanacağınız yeni verilere sahip olduğunuzdan emin olmanız gerekir. (örn. %70 oranında model tahmin sonucunun kullanılması ve %30 oranında rastgele sonuçların kullanılması).

Yeni verilerle eğitim ve dağıtım için bir ardışık düzen yapılandırmak bu codelab'in kapsamı dışındadır. Başlamak için Google Cloud AI Platform ve TFX'e göz atabilirsiniz.

10. Tebrikler!

Bu codelab'de, Firebase kullanarak uygulama içi satın alma işlemlerini optimize etmek için cihazdaki bir TFLite modelini nasıl eğiteceğinizi ve dağıtacağınızı öğrendiniz. TFLite ve Firebase hakkında daha fazla bilgi edinmek için diğer TFLite örneklerine ve Firebase başlangıç ​​kılavuzlarına göz atın.

Sorularınız varsa bunları Stack Overflow #firebase-machine-learning adresinde bırakabilirsiniz.

Neleri ele aldık?

  • TensorFlow Lite
  • Firebase ML
  • Firebase Analizi
  • Büyük Sorgu

Sonraki adımlar

  • Uygulamanız için bir optimize edici modeli eğitin ve dağıtın.

Daha fazla bilgi edin