ABD Konut Fiyat Tahmini

Abd Konut Fiyat Tahmini



Ev inşa etmek hayatımızdaki zorlu faktörlerden biridir. İnşaat öncesinde önceki evin fiyatına göre evinizin fiyatını tahmin etmeniz mümkündür. Ev fiyatını büyük ölçüde etkileyen faktörler arasında toplam oda sayısı (yatak, banyo vb.) ve arsa alanı yer almaktadır. Böylece evin inşası için gereken bütçeyi tahmin edebiliriz.

Bu kılavuzda Python aracılığıyla Makine Öğrenimini kullanarak ABD evlerinin fiyatını nasıl tahmin edeceğimizi göreceğiz. Öncelikle kullandığımız veri setini tartışıyoruz ve ardından veriyi ön işleme tabi tutuyoruz. Daha sonra veri setinde mevcut olan nitelikleri görselleştiriyoruz ve eğitim veri seti üzerinde farklı Makine Öğrenimi algoritmaları uyguluyoruz (Seattle, Washington Ağustos 2022 – Aralık 2022). Son olarak Test veri setinde yer alan bazı evlerin fiyatlarını tahmin ederek bu rehberi sonlandırıyoruz. Bu projeyi uygulamaya geçmeden önce bu projede kullanılan Makine Öğrenimi terminolojilerini anlamamız gerekiyor.







Regresyon

Makine Öğreniminde sayısal verilerle çalışıyorsanız Regresyon'u anlamanız gerekir. Regresyon, Makine Öğreniminde bağımsız nitelikler ile bağımlı nitelikler (sınıf etiketi/hedef) arasındaki ilişkiyi anlamak için kullanılan Denetimli Öğrenme Tekniğidir. Makine, veri setinde bulunan her kaydı öğrenerek ev fiyatını tahmin ediyor. Dolayısıyla denetimli bir öğrenmedir.



Örneğin senaryomuzda bağımsız özellikler yatak sayısı, banyo sayısı, arazi büyüklüğü, posta kodu vb.'dir. Bunlara dayanarak evimizin fiyatını tahmin edebiliyoruz. Yani bunlar hiçbir şeye bağlı olmayan bağımsız niteliklerdir. Fiyat, bu özelliklere bağlı olan hedef özellik veya sınıf etiketidir.



1. Doğrusal Regresyon

Doğrusal Regresyon algoritması, bağımlı nitelik (Y) ve bağımsız nitelik (X) değişkenleri arasında doğrusal bir ilişki gösterir. Matematiksel olarak şu şekilde değerlendirebiliriz:





VE = aX+b

Burada “a” ve “b” Doğrusal Katsayılardır.

Python'da LinearRegression(), “sklearn.linear_model” modülünde mevcuttur. Projeyi hayata geçirirken bunu nasıl belirteceğimizi göreceğiz. Aşağıdaki parametrelere sahip modeldir:



2. Karar Ağacı

Temel olarak Karar Ağacı, düğümler kullanılarak sağlanan koşullara dayalı olarak bir problemin tüm olası çözümlerini elde etmek için kullanılan grafiksel bir gösterimdir. Karar düğümü karar vermek için kullanılır ve Yaprak düğümü belirli bir kararın çıktısını ifade eder. Karar Ağacı Regresörü ile evimizin fiyatını tahmin edebiliyoruz.

Python'da DecisionTreeRegressor “sklearn.tree” modülünde mevcuttur. Projeyi hayata geçirirken bunu nasıl belirteceğimizi göreceğiz. Aşağıdaki parametrelere sahip modeldir:

3. Rastgele Orman

Rastgele Orman, Karar Ağacı ile aynı işlevi gerçekleştirir. Ancak bir Orman (Karar Ağaçları koleksiyonu) alır ve Karar Ağaçlarının tüm çıktılarını birleştirir (ortalama değer). Örneğin Rastgele Orman boyutu 3'tür. Böylece dahili olarak üç Karar ağacı oluşturulur ve ilk Karar Ağacının Konut Fiyatı sonucu 20000 olur. İkinci Karar Ağacının Konut Fiyatı sonucu 20000 olur. son Karar Ağacı 10000'dir. 16.666.666 nihai sonuçtur ((20000+20000+10000)/3).

Python'da RandomForestRegressor “sklearn.ensemble” modülünde mevcuttur. Parametreli model aşağıdadır. Ağaç sayısını “n_estimators” parametresinde belirtebiliriz. Varsayılan olarak 100'dür.

Uygulama

ABD Konut fiyatını tahmin etme adımlarını hızlı bir şekilde görün. 2016 kayıtlarına sahip evlerin_train (CSV dosyası) veri kümesini (Makine Öğrenimi modelini eğitmek için kullanılır) dikkate alıyoruz. Daha sonra house_test dosyasında bulunan evin fiyat (505) kayıtlarını tahmin ediyoruz.

1. Eğitim ve Test Veri Kümelerini Yükleme

Pandas, Python'da veri analizi için kullanılan mevcut modüldür. Veri setlerini Python Ortamına yüklemek için bu modülü kullanıyoruz. Burada şunu kullanıyoruz: Google Şirketi Kod Ortamı olarak. Bu ücretsiz olarak mevcuttur. Sadece bir Google hesabı gereklidir.

Öncelikle dosyaları yerel bilgisayarımızdan Colab Env'e yüklememiz gerekiyor. Veri kümelerini şuradan indirin: Burada .

# Houses_train.csv ve house_test.csv dosyalarını Google Colab'ınıza yükleyin

# birbiri ardına.

itibaren google. ve diğerleri içe aktarmak Dosyalar

Dosyalar. yüklemek ( )

Read_csv(), CSV verilerini bir değişkene yüklemek için kullanılan işlevdir. Parametre olarak dosya adını alır.

içe aktarmak pandalar

# house_train.csv dosyasını train_data değişkenine yükleyin

tren_verileri = pandalar. okuma_csv ( 'houses_train.csv' )

# house_test.csv dosyasını test_data değişkenine yükleyin

test verisi = pandalar. okuma_csv ( 'house_test.csv' )

# test_data'yı test_data1 değişkenine kaydedin

test_data1 = test verisi

Her sütundaki sütunları ve boş olmayan kayıtların sayısını görüntüleyelim. Bu bilgiyi almak için Pandas.DataFrame.info() kullanılır.

Yazdır ( train_data. bilgi ( ) )

Yazdır ( test_data1. bilgi ( ) )

Çıktı:

2. Veri Ön İşleme

Her iki veri setinde de “lot_size” sütunu sqft ve acre değerlerini tutar (“lot_size_unit’s” sütunundaki satırları görerek varyansı bulabilirsiniz). Ancak format metrekare cinsinden olmalıdır. Bu yüzden “lot_size” sütunundaki değerleri dönümden metrekareye dönüştürmemiz gerekiyor. Benzer şekilde, bu “test_data1” için de yapılmalıdır.

DataFrame.loc[] burada 'acre' ile 'lot_size_units'i bulmak ve 'lot_size'de bulunan değeri 43560 ile çarpmak için kullanılır.

# train_data'da lot_size acre değerlerini Square feet'e dönüştürün

train_data. yer [ ( tren_verileri [ 'lot_size_units' ] == 'dönüm' ) , 'lot büyüklüğü' ] = tren_verileri [ 'lot büyüklüğü' ] * 43560

# Test_data1'de lot_size acre değerlerini Square feet'e dönüştürün

test_data1. yer [ ( test_data1 [ 'lot_size_units' ] == 'dönüm' ) , 'lot büyüklüğü' ] = test_data1 [ 'lot büyüklüğü' ] * 43560

Yazdır ( train_data. KAFA ( ) )

Yazdır ( test_data1. KAFA ( ) )

Çıktı:

Artık “lot_size” sütunundaki tüm değerlerin sqft değerleri olduğunu göreceksiniz.

Bu sütunda bazı eksik değerleri görüyorsunuz. Sütunlarda bulunan NaN değerlerini her iki veri kümesindeki aynı sütunun ortalamasıyla değiştirelim.

DataFrame['sütun_adı'].fillna(), ortalama() işlevini kullanarak eksik değerleri ortalamayla doldurmak için kullanılır. DataFrame['sütun_adı'].mean(), finna() işlevine parametre olarak iletilir. Şimdi ortalamayı görüntüleyelim ve sayıyı görelim:

# lot_size sütunundaki eksik değerleri, mevcut değerlerin ortalaması ile doldurun

tren_verileri [ 'lot büyüklüğü' ] = tren_verileri [ 'lot büyüklüğü' ] . hissetmek ( tren_verileri [ 'lot büyüklüğü' ] . Anlam ( ) )

# Görüntüleme Ortalaması

Yazdır ( 'Eğitim verileri Ortalama Değeri: ' , tren_verileri [ 'lot büyüklüğü' ] . Anlam ( ) )

Yazdır ( sadece ( tren_verileri [ 'lot büyüklüğü' ] ) )

# lot_size sütunundaki eksik değerleri, mevcut değerlerin ortalaması ile doldurun

test_data1 [ 'lot büyüklüğü' ] = test_data1 [ 'lot büyüklüğü' ] . hissetmek ( test_data1 [ 'lot büyüklüğü' ] . Anlam ( ) )

# Görüntüleme Ortalaması

Yazdır ( 'Test verileri Ortalama Değeri: ' , test_data1 [ 'lot büyüklüğü' ] . Anlam ( ) )

Yazdır ( sadece ( test_data1 [ 'lot büyüklüğü' ] ) )

Çıktı:

Train Dataset sütununda bulunan eksik değerler, 18789.95194 ortalama değeriyle, 'lot_size' Test Dataset sütununda bulunan eksik değerler ise 8961.0 ortalama değeriyle değiştirildi.

3. Veri Temizleme

Modeli eğitirken sonucu tahmin etmek için gerekli olmayan bazı gereksiz özellikler vardır. Bizim durumumuzda her iki veri kümesinden de kaldırılacak “lot_size_units”, “zip_code” ve “size_units” olmak üzere üç özellik bulunmaktadır. pandas.DataFrame.drop(), bu üç sütunu her iki veri kümesinden kaldırmak için kullanılır.

tren_verileri = train_data. düşürmek ( [ 'lot_size_units' , 'posta kodu' , 'size_units' ] , eksen = 1 )

test_data1 = test_data1. düşürmek ( [ 'lot_size_units' , 'posta kodu' , 'size_units' ] , eksen = 1 )

Yazdır ( train_data. bilgi ( ) )

Yazdır ( test_data1. bilgi ( ) )

Çıktı:

Artık veri kümeleri iyi durumda. Gereksiz sütunlar kaldırılır ve eksik değerler mevcut değildir.

4. Veri Görselleştirme

Train verisinin sütunları için bir histogram oluşturalım. pandas.DataFrame.hist() işlevi, tüm nitelikler için histogramlar oluşturmak amacıyla kullanılır.

train_data. geçmiş ( incir büyüklüğü = ( 4 , 9 ) )

Çıktı:

Tren verilerine ilişkin yataklar, banyolar, boyut, lot_size ve fiyat sütunları için histogram oluşturulur.

Tüm alanların birbirine göre korelasyonunu oluşturalım. İlişkili değerleri çizmek için Plotly.express modülü kullanılır.

içe aktarmak planlı bir şekilde. ifade etmek

düzelt = train_data. düzelt ( )

# İlişkili verilerin grafiğini çizin

görünüm_fig = planlı bir şekilde. ifade etmek . gösteri ( düzelt , metin_auto = Doğru )

# Görüntülemek

view_fig. göstermek ( )

Çıktı:

  1. Yataklar 0,2935 fiyatla, -0,059 lot_size ile, 0,77 boyutla ve 0,65 banyolarla ilişkilidir.
  2. Banyolar 0,3173 fiyatla, -0,054 lot_size ile, 0,667 banyolarla ve 0,771 yataklarla ilişkilidir.
  3. Boyut 0,444 fiyatla, -0,044 lot_size ile, 0,667 boyutla ve 0,652 yataklarla ilişkilidir.

5. Modelin Hazırlanması

Fiyatı train_data'dan çıkararak hedef olarak belirlememiz gerekiyor. Eğitim ve Test verilerinde mevcut olan özelliklerin bu aşamada aynı olduğundan emin olun.

hedef = tren_verileri [ 'fiyat' ]

tren_verileri = train_data. düşürmek ( [ 'fiyat' ] , eksen = 1 )

Yazdır ( train_data. bilgi ( ) )

Yazdır ( test_data1. bilgi ( ) )

Çıktı:

Artık dört bağımsız özellik (yatak, banyo, boyut ve lot_size) vardır ve fiyat, bu dört özelliğe bağlı olan bağımlı özelliktir.

6. Modeli Eğitmek

Öncelikle RandomForestRegressor algoritmasını uyguluyoruz. “sklearn.ensemble” paketinden içe aktarın. Bu bir Birleştirme Tekniğidir.

  1. RandomForestRegressor()'dan bir model oluşturun. Bu modele herhangi bir parametre aktarmıyoruz. Yani Karar Ağaçlarının sayısı varsayılan olarak 100'dür.
  2. Modeli sığdırmak için fit() yöntemini kullanın. İki parametre alır. İlk parametre bağımlı özellikler, ikinci parametre ise sınıf etiketi/hedefidir.
  3. Model Doğruluğunu görmek için Score() yöntemini kullanın. Ayrıca fit() yöntemiyle aynı parametreleri alır.
itibaren öğrendi topluluk içe aktarmak Rastgele OrmanRegresör

# Modeli Tanımlayın

model1 = Rastgele OrmanRegresör ( )

# Modeli sığdır

modeli1. yerleştirmek ( tren_verileri , hedef )

# Model Doğruluğu

Yazdır ( modeli1. Gol ( tren_verileri , hedef ) * 100 )

Çıktı:

86.08400889419033

7. Modeli Test Edin ve Sonuçları Saklayın

Bu, sonucu tahmin etmemiz ve saklamamız gereken son adımdır.

  1. Tahmin() yöntemi Test verilerini tahmin etmek için kullanılır. Modelle birlikte kullanılır ve İç İçe değerler/DataFrame listesini alır.
  2. Sonuçları CSV dosyasında depolamak için to_csv() yöntemini kullanın.
  3. Dosyayı Python ortamından (Google Colab) indirin.
# Model1 ile test_verileri1'i tahmin edin.

test verisi [ 'Fiyat' ] = modeli1. tahmin etmek ( test_data1 )

# test_data'yı test_results.csv'ye kaydedin

test verisi. to_csv ( 'test_results.csv' )

# Bu dosyayı Colab'dan indirin

Dosyalar. indirmek ( 'test_results.csv' )

Çıktı:

505 kayıttan 20 tanesini gösterelim. Fiyat sütununda her ev için öngörülen değerlerin yer aldığını görebilirsiniz.

Diğer modeller

DecisionTreeRegressor kullanarak evleri tahmin edelim. “sklearn.tree” modülünden içe aktarabilirsiniz.

itibaren öğrendi ağaç içe aktarmak Karar AğacıRegresör

# Modeli Tanımla

model2 = Karar AğacıRegresör ( )

# Modeli sığdır

model2. yerleştirmek ( tren_verileri , hedef )

# Model Doğruluğu

Yazdır ( model2. Gol ( tren_verileri , hedef ) * 100 )

# Model1 ile test_verileri1'i tahmin edin.

test verisi [ 'Fiyat' ] = model2. tahmin etmek ( test_data1 )

# test_data'yı test_results.csv'ye kaydedin

test verisi. to_csv ( 'test_results.csv' )

# Bu dosyayı Colab'dan indirin

Dosyalar. indirmek ( 'test_results.csv' )

Çıktı:

99.94183165335028

Tahmin edilen sonucu burada görebilirsiniz:

LinearrEgression kullanarak evleri tahmin edelim. Modeli “sklearn.linear_model” modülünden içe aktarın.

itibaren öğrendi doğrusal_model içe aktarmak Doğrusal Regresyon

# Modeli Tanımla

model3 = Doğrusal Regresyon ( )

# Modeli sığdır

modeli3. yerleştirmek ( tren_verileri , hedef )

# Model1 ile test_verileri1'i tahmin edin.

test verisi [ 'Fiyat' ] = modeli3. tahmin etmek ( test_data1 )

# test_data'yı test_results.csv'ye kaydedin

test verisi. to_csv ( 'test_results.csv' )

# Bu dosyayı Colab'dan indirin

Dosyalar. indirmek ( 'test_results.csv' )

Tahmin edilen sonucu burada görebilirsiniz:

Çözüm

Artık evinizin fiyatını oda sayısı, arsanızın alanı vb. özelliklere göre tahmin edebiliyorsunuz. Bu kılavuzda Seattle, Washington'daki gerçek ev verilerini dikkate aldık. Doğrusal Regresyon, Karar Ağacı, Rastgele Orman gibi Regresyon tekniklerini kullanarak 505 konutun fiyatını tahmin ettik. Modeli eğitmeden önce yapılması gereken tüm adımlar (Veri Ön İşleme, Veri Temizleme ve Veri Görselleştirme), kod parçacıkları ve çıktılarla adım adım anlatılmaktadır.