Azure Machine Learning Covid Tahmini

murat d
BilgeAdam Teknoloji
9 min readMay 23, 2020

Merhaba bu makalemizde Azure Machine Learning servisini kullanarak herhangi bir kod yazmadan nasıl makine öğrenmesi projesi geliştirilir onu göreceğiz.

Önceki Makalemizde (Covid Veri Seti Yükleme) verimizi yüklediğimize göre projemizi geliştirmeye başlayabiliriz.

Güncel bir konu olan covid virüsüne ait verilerle geleceğe yönelik bir tahmin nasıl yapılır buna bakalım. Zaman serilerini kullanmadan da geleceğe yönelik tahmin yapan bir makine öğrenmesi projesi geliştirebiliriz.

Bu çalışmayı yapabilmek için “veri ön hazırlık” dediğimiz süreçte; verimizi uygun hale getirmemiz gerekiyor. Burada amacımız total_cases alanı sonraki günlerde ne olur? Bunu tahmin etmek. Öncelikle bu alanın, daha önceki günlerde aldığı değerlerinin de aynı satırda olmasını sağladım. Böylece satırın içine geçmişe ait verilerini de ekleyerek; geleceğe yönelik bir tahmin için verimi zenginleştirmeye çalıştım.

(Not: Veriyi Yukarıdaki hale getirmek için gerekli adımlar alt işlemlerde ele alındı.)

Azure Machine Learning ortamında bu işlemi kolayca yapabileceğimiz “Designer” değimiz bir modül var. Burada “Pipeline” denilen bir tür iş akışı tasarladığımız yapıları kurabiliyoruz. Machine Learning çalışması ile ilgili tasarımlarımızı da bu Pipeline’larda oluşturuyoruz.

Burada farklı makine problemleri için Microsoft tarafından daha önceden oluşturulmuş 12 adet örnek de mevcuttur.

Biz burada “New Pipeline” adı altındaki “+” işaretine tıklayarak boş bir pipeline oluşturalım.

Aşağıdaki şekilde boş bir pipeline oluşturuldu. İlk aşamada değiştireceğimiz iki kısım var. Bunlardan bir tanesi “Pipeline- Created on … ” olarak oluşturulmuş pipeline adına daha açıklayıcı bir isim verebiliriz. Ben Burada “Covid 19 Turkiye” isimini verdim.

Diğer değiştireceğimiz kısım ise sağ tarafta kırmızı şekilde bir uyarı var. (Select a compute target to run the pipeline.) Oluşturduğumuz Pipeline’lanımızı çalıştırabilmek için bir “Compute” adı verilen bir sanal bilgisayarın tanımlanmış olması gerekiyor. Biz burada “Select compute target” diyerek daha önceden oluşturmuş olduğumuz “Compute” ’ü seçiyoruz

Bu aşamadan sonra artık bir makine öğrenmesi projesi geliştirebiliriz. Öncelikle “My Datasets” kısmında daha önce yüklemiş olduğumuz datasetimizi sürükleyerek çalışma alanımıza bırakalım.

İlgili aracın üzerinde sağ click yapıp “Visualize” dediğimizde veriyle ilgili bir ön izleme görebiliriz.

Burada biz sadece “Türkiye” verisiyle çalışacağımız için verimizi filtrelememiz gerekecek. Pipeline içinde veriyi filtrelemek ile ilgili birçok araç kullanabiliriz. Ben burada başka hesaplamalarda yapmak istediğim için “Data Transformation => Apply SQL Transformation” aracını kullandım.

Aşağıdaki şekilde araçlar arasındaki ilişkiyi sağlamak için “Covid 20200517” adlı dataset’te bulunan yuvarlağı tutarak; “Apply SQL Transformation” aracının sol tarafında bulunan yuvarlığın üstüne bırakarak iki aracı birbirine bağlamış oldum.

Apply SQL Transformation” aracına tıkladığımızda sağ tarafta bir pencere açılacaktır. Aşağıda görüldüğü üzere “SQL query script” alanına bu kod parçasını yapıştırabilirsiniz.

select date,

date(date,’-1 day’) as [date — 1]

,date(date,’-2 day’) as [date — 2]

,date(date,’-3 day’) as [date — 3]

,total_cases

,lag(total_cases,1,0) over (partition by location order by date ) [total_cases-1]

,lag(total_cases,2,0) over (partition by location order by date) [total_cases-2]

,lag(total_cases,3,0) over (partition by location order by date) [total_cases-3]

from t1

where location = ‘Turkey’

order by date

Bu kod ile öncelikle sadece Türkiye verilerini filtrelemiş olduk. Sonrasında ise bir satırda sadece total_cases bilgisi varken, bu kolonun yanına bir önceki güne ait total_cases-1, iki önceki güne ait total_cases-2, üç önceki güne ait total_cases-3 bilgileri de getirmiş olduk.

Bu kısmın sonuçlarını görmek için öncelikle pipeline’mızı çalıştırmamız gerekiyor. Bunun için sağ üst köşede bulunan “Submit” butonuna tıklayalım.

Eğer daha önce bir Compute seçmediysek bu aşamada uyarı olarak bir compute seçmemizi isteyecektir.

Submit” butonuna tıklayıp çalıştımak istediğimde aşağıdaki şekilde bir pencere açılıyor. Burada oluşturduğum pipeline’ımı her çalıştırdığımda bunları run 1, run 2, …run N şeklinde kayıt altında tutuyor. Burada bir “Experiment” seçerek bu çalışmalarımı farklı başlıklar altında gruplayabilirim. Ben daha önceden “covid” adı altında bir experiment oluşturmuşum. Siz de isterseniz “Create New” seçeneğini seçerek yeni bir experiment oluşturabilirsiniz.

Pipeline’mızın çalışması bittikten sonra “Apply SQL Transformation” aracının sonuçlarını görmek için aracın üzerine sağ click yapıp visualize diyebiliriz.

Ya da “Output + logs” sekmesinde yer alan 3. İkona tıklayarak da sonucuna bakabiliriz.

Bir veri setinde pipeline’mın sonraki aşamalarında kullanmak istemediğim bazı kolonları çıkarmak için “Select Columns in Dataset” aracını kullanıyoruz. Bunu kullanabilmek için sol taraftaki menuden “Data Transformation => Select Columns in Dataset” aracını sürükleyip pipeline’ıma bırakıyorum.

Not: Araçları bulmak için aracın adını “Search” kısmına da yazabilirsiniz.

Pipeline’ım aşağıdaki şekli aldı. Burada kullanmak istediğim veya istemediğim kolonları seçebiliyorum.

Kolon seçimi yapabilmek için “Select Columns in Dataset” aracına tıklayalım. Sonrasında ise sağ tarafta gelen pencereden “Edit Column” linkine tıklayalım.

Aşağıda gelen ekrandaki şekilde ayarlama yaptığımızda artık date-1, date-2, date-3 isimli kolonları ilerleyen aşamalarda görmeyeceğiz. Bu şekilde ayarlama yaptıktan sonra “Save” butonuna tıklayıp kaydedebiliriz. Bu işlemi de yaptıktan sonra tekar “Submit” ‘e tıklayarak çalıştıralım.

Not: Eğer bu aşamada kolonların isimleri liste olarak gelmiyorsa pipeline’ı çalıştırmadığınız için olabilir. Ya pipeline tekrar çalıştırın ya da bu kısımda kolon isimlerini el ile yazın. Ancak dikkat edin bu kısım büyük küçük harfe duyarlıdır.

Bir makine öğrenmesi projesinde veri setimizdeki tüm alanları kullanmak istemeyiz. Bu alanları seçme işleminden bir tanesi yukarıda gördük. Ancak bazı alanlarımı da tüm akış boyunca görmek isterim ama kullanacağım makine öğrenmesi algoritması tarafından da dikkate alınmasın isterim. Örneğin bu senaryoda “date” alanının bu şekilde ayarlamak istiyorum.

Bunun için “Data Transformation => Edit Metadata” aracını pipeline’mıza sürükleyelim ve “Select Columns in Dataset” ile bağlayalım.

Burada hangi kolonla işlem yapacaksam onu belirtiyor olmam lazım. Bir önceki adımdakine benzer şekilde “Edit Metadata” ’yı tıklayalım. Sonrasında ise sağ tarafta gelen pencerede “Edit Column” linkine tıklayalım.

Bu şekilde ayarlayalım sonrasında; aşağıdaki görüldüğü gibi seçilen kolonun “Fields” seçeneğini “ClearFeature” olarak değiştirelim. Bu işlem ilgili kolonu (date) akış içerisinden çıkarmayacağız. Ancak biraz sonra uygulayacağımız makine öğrenmesi algoritması’na da bir input olarak girişini engellemiş olacağız.

Bu işlemden sonra tekrar “Submit” diyerek çalıştıralım. Bu aşamaya kadar olan kısım veriyle ilgili yaptığımız ön hazırlık aşamasıydı. Burada artık bir makine öğrenmesi modeli kuracağız. Bunu yapabilmek için öncelikle verimizi ikiye bölmemiz gerekiyor.

Verimizin bir kısmı ile seçeceğimiz modeli eğiteceğiz ki buna “Train dataset” diyoruz. Diğer kalan kısmıyla da modelimizi teste tabi tutacağız ki buna da “Test dataset” diyoruz.

Verimizi ikiye bölmek için sol taraftaki menüden “Data Transformation => Split Data” aracını pipeline’mıza sürükleyip bırakalım.

Split Data” aracını seçtiğimizde sağ tarafta açılan pencere vasıtasıyla verimizi nasıl böleceğimizi seçebiliriz. Ben verimi 13 mayıstan küçük olanları seçecek şekilde ayırdım. Burada tekrar “Submit” diyerek pipeline’mızı çalıştıralım.

Burada geleceğe yönelik sayısal bir tahmin yapacağımız için regression problemi için tasarlanmış algoritmalardan birini seçmek durumundayız. Sol taraftaki menüden “Machine Learning Algorithms” kısmını açtığımızda 3 ana kategori altında farklı algoritmalar olduğunu görebiliriz. Biz burada başlangıç olarak “Regression — Linear Regression” Algoritmasını kullanacağız. Bu algoritmayı da pipeline’mıza sürükleyip bırakalım.

Algoritmamızı seçtikten sonra “Model Training => Train Model” aracını da pipeline’mıza sürükleyelim. Ve bağlantılarını aşağıdaki şekilde yapalım.

Train Model” bizim algoritmamızı, covid verilerilerimizle eğiteceğimiz aracımız. Bu nedenle iki tane girdi alıyor. Bir tanesi Algoritmanın kendisi, diğeri ise öğrenme işlemini yapacağı veri kümesi. Araçlarımızı yukarıdaki şekilde birbirine bağladıktan sonra bir işlem daha yapmamız gerekiyor. Görüldüğü üzere “Train Model” aracında bir uyarı var. Bu kısımda modele hangi alanı tahmin edeceğini söylememiz gerrekiyor. “Train Model” ‘i tıkladıktan sonra sağ tarafta açılan pencerede bulunan “Edit column” linkine tıklayalım.

Burada tahmin edeceğimiz kolon total_cases olduğundan bu alanı seçtim. Bu kısımdaki alanları el ile de yazabilirsiniz.

Modelimi çalıştırmadan önce bir araç daha ekleyebiliriz. “Model Scoring & Evaluation => Score Model” aracını yine sürükleyerek pipeline’mıza ekleyelim. Ve bağlantılarını aşağıdaki şekilde yapalım. Bu işlemi de tamamladıktan sonra “Submit” butonuna tıklayarak tekrar çalıştıralım.

Yukarıdaki işlemi tekrar özetleyecek olursak:

Train Model ‘e, iki tane girdi verdik. Bir tanesi “Linear Regression” algoritması, diğeri ise split ile böldüğümüz (<13.05.2020) satırlar. Bu araç; bu verileri, bu algoritmayla işleyerek bir öğrenme işlemi gerçekleştirecek.

Score Model’e, de iki tane girdi verdik. Bir tanesi öğrenme işlemi tamamlanmış bir model ve modelin hiç karşısına çıkmamış olan (>13.05.2020) den büyük satırlar. Böylece bu yeni satırların total_cases kolonunu tahmin etmesini sağlamış olduk.

Bu tahminleri görebilmek için “Score Model” ‘i sağ tıklayıp visualize diyebilirsiniz ya da sağ taraftaki pencerede yer alan “Outpus + logs” sekmesindeki visualize simgesini tıklayabilirsiniz.

Aşağıdaki resimde total_cases alanı bizim gerçekleşen değerlerimizdi. “Scored Labels” kolonu ise modelin bu satırlar için tahminidir.

Peki modelin genel başarısını görmek için ne yapabiliriz? Bu durumda “Model Scoring & Evaluation => Evaluation Model” aracını sürükleyip pipeline’mıza bırakalım. Ve aşağıdaki şekilde bağlantısını yapalım. Ve “Submit” butonuna tıklayıp tekrar çalıştıralım.

Modelin genel başarısını görmek için “Evaluate Model” de sağ click yapıp Visualize dersek aşağıdaki ekran gelecektir.

Bu ekrana baktığımızda karşımızda beş farklı değer olduğunu görürüz. Bu değerler bize, model tahminleri ne oranda isabetli yapmış onları gösteriyor. Her birinin farklı bir bakış açısı (hesaplama yöntemi) var. Bu hesaplamalardan birkaç tanesini örneklemek istersek:

Bu verileri yorumlayacak olursak:

Mean Absolute Error: 138.141 olması aslında şunu ifade ediyor. Şu an yaptığımız model, (+/-) 138.141 hata ile (hasta sayısı) tahmini gerçekleştiriyor.

Coefficient of Determination: 0.994 ile de modelin başarısını oran olarak görebiliyoruz.

Sonuç olarak bu değerin 1 e yakın olmasını isteriz. Burada her ne kadar yüksek (başarılı) gibi görünse de tahmin ettiğimiz total_cases alanı birikimli (toplanarak) artan bir değer. Bu nedenle tahminin başarılı olması öngörülebilir.9933

Benzer çalışmayı new_cases, new_deaths gibi diğer alanlar için deneğimizde benzer sonuçları alamıyoruz. Bunun en önemli etkenlerinden bir tanesi veri setinin çok sınırlı olması. 65 satır gibi az bir veriyle model daha uygun bir desen yakalayamıyor.

Örnek olması açısından; siz de bu örneğe benzer şekilde new_cases ’leri ya da new_deaths ’leri tahmin etmeyi deneyebilirsiniz.

Sonuç olarak; bu makalemizde bir makine öğrenmesi projesinin temel adımlarımı Azure Machine Learning servisini kulanarak uygulamış olduk.

--

--