Tantangan Rekko

Tantangan Rekko


Hari ini kami meluncurkan Rekko Challenge 2019 , kompetisi pembelajaran mesin dari bioskop online Okko .


Kami menyarankan Anda membangun sistem rekomendasi pada data nyata dari salah satu bioskop online Rusia terbesar. Kami yakin bahwa tugas ini akan menarik bagi pemula dan spesialis berpengalaman. Kami mencoba mempertahankan ruang lingkup maksimum untuk kreativitas, sambil tidak membebani Anda dengan kumpulan data gigabyte dengan ratusan fitur yang telah dihitung sebelumnya.


Baca lebih lanjut tentang Okko, tugas, data, hadiah, dan aturan - di bawah ini.


Tantangan


Anda memiliki akses ke data pada semua tampilan, penilaian, dan penambahan pada film dan serial "Dihororis" oleh pengguna selama N hari (N> 60), serta semua meta-informasi tentang konten. Diperlukan untuk memprediksi film dan seri mana yang akan dibeli atau ditonton pengguna dengan berlangganan selama 60 hari ke depan.


Pada bagian selanjutnya, kami mencoba untuk menggambarkan apa yang perlu Anda ketahui tentang bioskop online minimum agar dapat dengan cepat memahami data dan mulai menganalisisnya. Jika informasi ini tidak relevan bagi Anda, Anda dapat langsung melanjutkan ke deskripsi data .


Tentang layanan kami


Jika pengguna ingin menonton film secara legal di Internet, ia memiliki tiga cara utama.


Cara pertama adalah menonton secara gratis, terus-menerus menginterupsi iklan ( AVOD , Advertising Video On Demand). Yang kedua adalah membeli film untuk koleksi atau sewa Anda ( TVOD , Transactional Video On Demand). Yang ketiga adalah berlangganan untuk periode tertentu ( SVOD , Berlangganan Video Sesuai Permintaan).


Okko hanya berfungsi pada model TVOD dan SVOD. Tidak ada iklan sama sekali dalam layanan kami.


Secara total, layanan ini memiliki sedikit lebih dari 10 ribu film dan seri, sekitar 6 ribu di antaranya tersedia dengan berlangganan, sisanya hanya untuk pembelian atau sewa. Pada saat yang sama, hampir semua konten berlangganan dapat dibeli. Pengecualian adalah, misalnya, acara TV Amediateka , mereka hanya bisa ditonton dengan berlangganan.


Distribusi konten berdasarkan model konsumsi


Menurut model mana film ini akan tersedia, sebagian besar tergantung pada studio yang memiliki hak. Mereka menyimpulkan kontrak dengan bioskop online, yang menentukan kapan dan untuk hak apa film itu akan tersedia. Sebagai aturan, kondisinya sama untuk semua pemain pasar, tetapi kadang-kadang studio membuat konsesi ke beberapa bioskop atau menawarkan kondisi yang lebih menguntungkan untuk lebih banyak uang. Jadi ada yang eksklusif.


Misalnya, inovasi global utama tidak segera masuk ke langganan, tetapi hanya setelah 2-3 bulan setelah muncul dalam layanan. Apalagi, dalam beberapa minggu pertama mereka bahkan tidak bisa disewa, hanya kesempatan untuk membeli selamanya tersedia. Tetapi film-film Rusia mungkin tersedia dengan berlangganan segera setelah rilis dan kadang-kadang bahkan bersamaan dengan dimulainya sewa di bioskop offline.


Ketika kontrak berakhir, film menjadi tidak tersedia - sampai perpanjangan kontrak berakhir atau kesimpulan yang baru.


Contoh kartu film yang tidak dapat diakses


Periode kurangnya hak atas konten terlihat jelas pada grafik jumlah tampilan. Di bawah ini, misalnya, adalah bagan untuk film "John Wick 2". Pertama-tama, kelihatannya bahwa hadup berbaring untuk beristirahat selama beberapa bulan, tetapi tidak: hak telah berakhir.


Grafik penayangan film "John Wick 2"


Puncak tertinggi dalam grafik di atas (ditandai dengan garis vertikal) bertepatan dengan tanggal film ditambahkan ke langganan: ini adalah perilaku yang sangat khas untuk hal baru profil tinggi. Layanan kami memiliki 12 langganan:


  • Delapan tematik
  • Serial TV Amediateka,
  • Serial TV ABC,
  • Film dan seri Rusia dari layanan START,
  • Film 4K.

Dan dua paket berlangganan: Optimal, yang mencakup semua langganan tematik, dan Optimal + Amediateka.


Antarmuka Berlangganan


Yang paling populer, tentu saja, adalah paket meta. Dari langganan tematik, pengguna lebih memilih World Cinema dan Our Cinema.



Beberapa pengguna menonton film hanya dengan berlangganan, sebagian besar hanya membeli film atau membeli di samping berlangganan.


Paling sering, pengguna memilih untuk membeli barang baru untuk sewa saat ini dan pemutaran perdana tahun lalu.


Sumber pembelian paling populer dalam aplikasi adalah bagian "Rekomendasi", diikuti oleh "Pencarian", "Berita" dan "Katalog". Pengguna membeli sebagian film dari "Mirip" dan "Hafalkan".



Salah satu masalah utama yang kami perjuangkan secara aktif di Okko adalah masalah pengguna memilih konten. Jika Anda melihat grafik kemungkinan melakukan pembelian versus waktu yang Anda habiskan dalam layanan (data untuk tahun lalu), akan menjadi jelas bahwa pengguna siap untuk memilih dan membeli film dalam 10 menit pertama, maka kemungkinan pembelian dengan cepat berkurang. Pada saat yang sama, masih ada sebagian besar pengguna yang menghabiskan dalam layanan dari setengah jam hingga satu jam dan tidak dapat memilih konten yang cocok untuk diri mereka sendiri.


10 menit - tidak terlalu banyak. Selama waktu ini, pengguna tidak dapat secara fisik memeriksa katalog secara terperinci dan memilih konten yang disukainya.


Di sinilah Rekko, sistem rekomendasi internal untuk teater film online Okko, masuk. Rekko saat ini beroperasi di dua bagian layanan - "Rekomendasi" dan "Serupa".


Bagian rekomendasi TV


Mirip dengan TV


Untuk menilai kepuasan pengguna dengan konten, kami menganalisis fakta pembelian, tampilan berdasarkan langganan, waktu menonton, menambah peringkat Dihafal dan pengguna.


Skala peringkat di Okko diwakili oleh lima tanda bintang dengan setengah divisi: dibutuhkan nilai integer dari 0 hingga 10.


Antarmuka Peringkat


Pengguna dapat menilai film kapan saja, terlepas dari fakta pembelian atau tontonan. Skor dapat diubah berkali-kali tanpa batas, tetapi tidak dapat dibatalkan.


Anda dapat "mengingat" film kapan saja, maka itu akan muncul di "ingat" di profil pengguna. Dengan cara yang sama, dapat dihapus dari sana.


Antarmuka penyimpanan


Film yang direkam di Profil


Pengerjaan Rekko dimulai tepat setahun yang lalu dan saat ini, menurut tes A / B, itu memungkinkan kami untuk meningkatkan jumlah pembelian rata-rata sebesar 4%, pendapatan transaksi sebesar 3%, konversi ke langganan sebesar 5%, dan pengguna mulai memilih film 18% lebih cepat .



Data


Semua data, kecuali untuk melihat waktu dan peringkat, dianonimkan atau didistorsi. Waktu dinyatakan dalam satuan-satuan abstrak di mana hubungan keteraturan dan jarak dipertahankan.


transaction.csv


Rekaman semua transaksi dan tampilan konten pada mereka selama periode pelatihan. Transaksi di sini adalah pembelian film selamanya, baik untuk disewakan atau untuk memulai menonton dengan berlangganan.


element_uiduser_uidkonsumsi_modetsmenyaksikan_timedevice_typeprodusen_produsen
33365177S44305181.21802064282050
481593316S44305180.6060276262989011
4128262355S44305180.41444582833050

  • element_uid - pengidentifikasi elemen
  • user_uid - id pengguna
  • consumption_mode - jenis konsumsi ( P - beli, R - rental, S - view by berlangganan)
  • ts - waktu transaksi
  • watched_time - jumlah detik yang ditonton oleh pengguna untuk detik transaksi ini
  • device_type - jenis perangkat anonim tempat transaksi dilakukan
  • device_manufacturer - produsen anonim dari perangkat tempat transaksi dilakukan

Distribusi Watched_time


ratings.csv


Informasi tentang peringkat pengguna untuk periode pelatihan. Informasi dikumpulkan, mis. jika pengguna mengubah peringkatnya, hanya nilai terakhir yang akan disajikan dalam tabel.


user_uidelement_uidperingkatts
57125213641044305174.26309871
6314030371044305139.28281821
4438174363844305136.20584908

  • element_uid - pengidentifikasi elemen
  • user_uid - id pengguna
  • rating - rating ditentukan pengguna (dari 0 hingga 10 )
  • ts - peringkat waktu

Distribusi peringkat


bookmarks.csv


Fakta bahwa pengguna menambahkan film ke "diingat". Informasi dikumpulkan, mis. jika pengguna menghapus film dari "Tersimpan", tidak akan ada catatan untuk menambahkannya di tabel.


user_uidelement_uidts
301135718544305161.30743926
301135408344305160.01187332
3011351015844305157.74463292

  • element_uid - pengidentifikasi elemen
  • user_uid - id pengguna
  • ts - waktu untuk menambahkan film ke "ingat"

catalogue.json


Meta-informasi tentang semua elemen yang direkomendasikan: film, seri, dan film serial.


 { "1983": { "type": "movie", "availability": ["purchase", "rent", "subscription"], "duration": 140, "feature_1": 1657223.396513469, "feature_2": 0.7536096584, "feature_3": 39, "feature_4": 1.1194091265, "feature_5": 0.0, "attributes": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...] }, "2166": { "type": "movie", "availability": ["purchase", "rent"], "duration": 110, "feature_1": 36764165.87817783, "feature_2": 0.7360206399, "feature_3": 11, "feature_4": 1.1386044027, "feature_5": 0.6547073468, "attributes": [16738, 13697, 1066, 1089, 7, 5318, 308, 54, 170, 33, ...] }, ... } 

  • type - mengambil nilai movie , multipart_movie atau series
  • duration - durasi dalam hitungan menit, dibulatkan menjadi puluhan (durasi seri untuk film seri dan serial)
  • availability - hak yang tersedia untuk konten (mungkin mengandung nilai purchase , rent , dan subscription )
  • attributes - tas beberapa atribut anonim
  • feature_1..5 - lima bahan anonim dan fitur ordinal

Hak-hak yang tersedia ditunjukkan pada akhir periode pelatihan dan awal ujian.


Penting: di json, kunci kamus hanya berupa string, jadi pastikan untuk melemparkannya ke nomor jika Anda membaca pengidentifikasi dalam tabel sebagai angka (lakukan ini untuk menghemat memori).


Distribusi karakteristik dalam katalog


Metrik


Sebagai metrik, kami menggunakan Mean Average Precision (MAP) untuk 20 elemen, tetapi sedikit dimodifikasi. Selama periode pengujian, pengguna dapat mengonsumsi kurang dari 20 film. Jika dalam hal ini kami menganggap PETA yang jujur, batas atas metrik akan kurang dari satu, dan nilainya akan kecil. Oleh karena itu, jika pengguna telah mengonsumsi kurang dari 20 elemen, kami menormalkan dengan jumlah mereka, dan bukan oleh 20.


 mboxMNAP@20= frac1 lvertU rvert sumu inU frac1 min(nu,20) sumi=120ru(i)pu@i


pu@k= frac1k sumi=1kru(i)


ru(i)- terletak iElemen prediksi dalam himpunan elemen yang dikonsumsi selama periode pengujian oleh pengguna u, nuApakah ukuran set ini. Jika tiba-tiba metrik kualitas peringkat dilupakan, ada artikel bagus tentang mereka di hub


Kode Metrik dalam Cython
 def average_precision( dict data_true, dict data_predicted, const unsigned long int k ) -> float: cdef: unsigned long int n_items_predicted unsigned long int n_items_true unsigned long int n_correct_items unsigned long int item_idx double average_precision_sum double precision set items_true list items_predicted if not data_true: raise ValueError('data_true is empty') average_precision_sum = 0.0 for key, items_true in data_true.items(): items_predicted = data_predicted.get(key, []) n_items_true = len(items_true) n_items_predicted = min(len(items_predicted), k) if n_items_true == 0 or n_items_predicted == 0: continue n_correct_items = 0 precision = 0.0 for item_idx in range(n_items_predicted): if items_predicted[item_idx] in items_true: n_correct_items += 1 precision += <double>n_correct_items / <double>(item_idx + 1) average_precision_sum += <double>precision / <double>min(n_items_true, k) return average_precision_sum / <double>len(data_true) def metric(true_data, predicted_data, k=20): true_data_set = {k: set(v) for k, v in true_data.items()} return average_precision(true_data_set, predicted_data, k=k) 

Hadiah dan aturan


Dana hadiah adalah 600 ribu rubel:


  • 300 ribu akan menerima pemenang,
  • 200 ribu - peserta di tempat kedua
  • 100 ribu - peserta di tempat ketiga.

Aturannya standar: jangan mengganggu platform, gunakan hanya satu akun, hindari pertukaran kode pribadi dengan peserta lain dan jangan menjadi karyawan Okko dan Rambler.


Bagaimana memulainya


Bahkan mungkin sulit bagi profesional berpengalaman untuk mulai berpartisipasi dalam kompetisi: Anda perlu dengan cepat mengetahui area domain baru, memahami dan menganalisis data, dan memilah perpustakaan baru.


Kami berharap bahwa dalam artikel ini kami dapat membenamkan Anda dalam subjek sinema online dan mendeskripsikan datanya dengan cukup detail. Dalam arsip dengan tugas, Anda akan menemukan file baseline.ipynb , yang berisi kode untuk memuat data dan contoh solusi sederhana menggunakan algoritma K tetangga terdekat.


Jika ada poin dari deskripsi data dan domain domain tetap tidak jelas, kami akan dengan senang hati menjawab pertanyaan Anda di komentar. Anda juga dapat mengajukan pertanyaan di saluran telegram @boosterspro - akan ada diskusi utama kompetisi.


Jadi bagaimana memulainya:


  1. Daftar ke boosters.pro dan bergabunglah dengan @boosterspro ;
  2. Unduh data di halaman kompetisi atau di sini ;
  3. Buka baseline.ipynb , instal paket yang diperlukan, jalankan semua kode dan unduh solusi pertama Anda;
  4. Coba ubah baseline untuk meningkatkan kinerja;
  5. Eksperimen!

Tantangan Rekko dimulai hari ini, 18 Februari. Keputusan dibuat sampai 18 April, 23:59:59 waktu Moskow.


Kami menunggu semua orang dan semoga sukses!


Ngomong-ngomong, kami mencari karyawan . Termasuk pengembang sistem rekomendasi.


UPD 02/26/2019: Menemukan bug dalam pembentukan data uji, menggantinya dan file test_users.json . Semua peserta diberikan upaya tambahan.

Source: https://habr.com/ru/post/id439180/


All Articles