Python ile Maç Sonuçlarını Tahmin Eden Telegram Botu Yapalım
Başlarken
WhatsApp’in başarılı alternatiflerinden Telegram, kullanıcılarına chatbot yapmayı kolaylaştıran çözümler sunuyor. Bu makalede sizlerle birlikte maç sonuçlarını tahmin eden, gelecek haftanın tahminleri arasından 4 tahmini seçip kupon oluşturan bir Telegram botu yapacağız. Bu botu yaparken python-telegram-bot gibi API kullanmamızı kolaylaştıran kütüphaneleri kullanmayacağız. (Daha kapsamlı bir bot yapıyorsanız kullanmanızı tavsiye ederim)
Arkaplanda çalışacak kodu yazmadan önce Botumuzu Telegram’a tanıtıp kullanacağımız API key’i almamız gerekiyor. Telegram API, GET ve POST requestleri ile çalışan bir yapıya sahip, çıktıları ise JSON formatında alıyoruz. Botumuzu Telegram’a tanıtmak için https://t.me/botfather adresinden BotFather ile iletişime geçmemiz gerekiyor. Burada /newbot komutu ile botunuza bir isim, kullanıcı adı ve API key belirleyebilirsiniz. Olur da API key’inizi bir şekilde kaybettiyseniz/başkalarına açtıysanız BotFather aracılığıyla yeni bir key alabilirsiniz.
API’ye Erişim ve Mesaj Gönderme
Telegram API’yi kullanarak mesaj gönderebilmemiz için öncelikle Updates’e erişmemiz, bunun içinse elimizdeki API key’i kullanmamız gerekiyor. Updates’e erişim ve mesaj gönderimi işlemlerini sadece GET request kullanarak halledebiliriz.
Updates’e eriştiğinizde sizi karşılayacak JSON dosyasını daha iyi anlamak istiyorsanız https://api.telegram.org/bot<API_KEY>/getUpdates URL’sinde <API_KEY> boşluklarını kendi tokeninizle doldurup direkt olarak JSON verisine ulaşabilirsiniz. Telegram Bot API dokümantasyonundan yararlanmak istiyorsanız https://core.telegram.org/bots/api#getting-updates adresinden “Updates” ile ilgili daha detaylı bilgi alabilirsiniz.
Aşağıdaki kodla kullanıcı /kupon komutuyla kupon istediğinde kendisi için oluşturulmuş kuponu mesaj olarak alacak. Daha sonra maçların tahmin edilmesine ve bu tahminin string’e dönüştürülüp mesaj gönderimi için hazırlanmasına geçeceğiz.
Maç Tahmini ve Botun Çalıştırılması
Maç tahminlerinin oluşturulmasında fixturedownload.com verilerini kullanarak Poisson Regresyonu yaptım, verileri aldığım sitede maç sonuçları biraz geç güncellense de oynanan ve oynanacak maçları direkt .csv dosyası olarak vermesi işimi kolaylaştırdı. Dilerseniz burada daha güncel bir veritabanı kullanabilirsiniz. Botumuz maç tahminlerini 1x2, yani Ev Sahibi Kazanır-Berabere-Deplasman Kazanır şeklinde paylaşacak. Kullanacağımız model olan Basit Poisson Dağılımı %40-%50 civarı bir teorik olasılığa sahip, yani 1000 maçı 1x2 cinsinden tahmin ettiğinde bunların 500'ünün sonucunu doğru biliyor.
Machine Learning modeli yazının sonundaki github repo’sunda yer alıyor. Botun çalışması için o dosyadaki kodları da projenize eklediğinizden emin olun. Modelin yer aldığı predict.py dosyasındaki main() fonksiyonunda mesajın sonsuz döngüde tekrar tekrar gönderilmemesi için Updates’in uzunluğu sürekli kontrol ediliyor. Böylece “Updates’teki son mesajda ‘/kupon’ yazıyorsa kullanıcıya tahmin gönder. Sonra Updates’in uzunluğu eski uzunluğuyla aynı değilse, yani yeni bir mesaj yazılmamışsa beklemede kal. Eğer uzunluk değişmişse ve son mesaj ‘/kupon’ ise son mesajı gönderen kullanıcıya tahmin gönder.” mantığını uygulamış oluyoruz.
Sonuç
Bu makalede üzerinde çalıştığım bir projeyi basit haliyle de olsa sizlere anlatmak ve bizzat uygulamasını yaptırmak istedim. Projenin kodlarını https://github.com/umitkaanusta/MacTahminBotu adresinden görebilirsiniz. Kodu incelediğinizde uygulamaya geçmemiş fonksiyonlar ve eklenmemiş ligler göreceksiniz, proje tamamlandığında 5 büyük lig + STSL’den daha gelişmiş bir matematiksel model ile tahminler sunan bir botumuz olacak.
Küçük bir not: Bu proje, bir machine learning algoritmasını anlamak ve ML’nin kullanım alanlarından birini keşfetmek amacıyla yazılmıştır. Bahis oynanmasını hiçbir şekilde tasvip ve tavsiye etmiyorum. Kullandığım algoritmanın %40-%50 doğruluk oranına güvenip sistemin yaptığı kuponları oynarsanız, çok büyük ihtimalle, sistemin doğru bildiği maçları aynı kupona denk getirememiş olursunuz.