Die US - amerikanische Immobilienbörse Zillow bietet ein Verfahren, dass den Wert einer Immobilie anhand dessen Eigenschaften schätzen kann. Um dieses Verfahren zu verbessern wurde ein Preis auf Kaggle ausgeschrieben. Im Rahmen des Wettbewerbs wurden mehrere Datensätze veröffentlicht. Diese beinhalten Daten zum LogError zwischen geschätzen und tatsächlichen Verkaufspreis sowie dem Verkaufsdatum. Weiter werden die unterschiedlichen Features der Immobilien aufgeführt.
Im folgenden wird der Datensatz “properties_2017” näher analysiert. Ziel ist es, Eine PCA mit anschließender multiplen linearen Regression durchzuführen. Hierzu muss im Verlauf die Beschaffenheit der Features betrachtet werden.
Zunächst wird aufgezeigt, wo sich die Immobilien befinden, welche im Datensatz enthalten sind:
Es handelt sich also um Immobilen aus Kalifornien im Raum von Los Angeles.
Im nächsten Schritt werden die spezifischen Features im Datensatz betrachtet. Der Datensatz weisst eine sehr hohe Anzahl von NAs auf:
## [1] "Insgesamt verfügt der Datensatz über 58 Features und 2985217 Zeilen."
Hier wird deutlich das knapp 50 Prozent der Daten innerhalb des Datensatzes fehlen.
## [1] "parcelid" "airconditioningtypeid"
## [3] "architecturalstyletypeid" "basementsqft"
## [5] "bathroomcnt" "bedroomcnt"
## [7] "buildingclasstypeid" "buildingqualitytypeid"
## [9] "calculatedbathnbr" "decktypeid"
## [11] "finishedfloor1squarefeet" "calculatedfinishedsquarefeet"
## [13] "finishedsquarefeet12" "finishedsquarefeet13"
## [15] "finishedsquarefeet15" "finishedsquarefeet50"
## [17] "finishedsquarefeet6" "fips"
## [19] "fireplacecnt" "fullbathcnt"
## [21] "garagecarcnt" "garagetotalsqft"
## [23] "hashottuborspa" "heatingorsystemtypeid"
## [25] "latitude" "longitude"
## [27] "lotsizesquarefeet" "poolcnt"
## [29] "poolsizesum" "pooltypeid10"
## [31] "pooltypeid2" "pooltypeid7"
## [33] "propertycountylandusecode" "propertylandusetypeid"
## [35] "propertyzoningdesc" "rawcensustractandblock"
## [37] "regionidcity" "regionidcounty"
## [39] "regionidneighborhood" "regionidzip"
## [41] "roomcnt" "storytypeid"
## [43] "threequarterbathnbr" "typeconstructiontypeid"
## [45] "unitcnt" "yardbuildingsqft17"
## [47] "yardbuildingsqft26" "yearbuilt"
## [49] "numberofstories" "fireplaceflag"
## [51] "structuretaxvaluedollarcnt" "taxvaluedollarcnt"
## [53] "assessmentyear" "landtaxvaluedollarcnt"
## [55] "taxamount" "taxdelinquencyflag"
## [57] "taxdelinquencyyear" "censustractandblock"
Bei der Betrachtung der Featurenamen wird klar, das diese teilweise sehr kryptisch sind. Aus diesem Grund werden die wichtigsten Features für die weitere Arbeit umbenannt:
## [1] "id_parcel" "lüftung_id"
## [3] "architektur_styleid" "keller_größe"
## [5] "anzahl_badezimmer" "anzahl_schlafzimmer"
## [7] "baumaterial_klasse_id" "qualität_id"
## [9] "anzahl_badezimmer_calc" "terrassen_id"
## [11] "erdgeschoss_größe_finished" "wohnfläche_gesamt_finished_calc"
## [13] "größe_finished_Wohnfläche" "größe_perimeterlivingarea_finished"
## [15] "größe_gesamt_finished" "finishedsquarefeet50"
## [17] "Fläche_gesamt_unfished_finished" "fips"
## [19] "anzahl_kamine" "anzahl_vollstä_badezimmer"
## [21] "anzahl_garagen" "garage_größe_gesamt"
## [23] "flag_tuborspa" "heizung_id"
## [25] "latitude" "longitude"
## [27] "grundstück_größe" "anzahl_pools"
## [29] "pool_größe_gesamt" "pooltypeid10"
## [31] "pooltypeid2" "pooltypeid7"
## [33] "zoneneinteilung_landuse_county" "zoneneinteilung_landuse"
## [35] "zoneneinteilung_property" "rawcensustractandblock"
## [37] "stadt" "bundesstaat"
## [39] "region_neighbor" "region_zipcode"
## [41] "anzahl_räume" "stockwerk_id"
## [43] "anzahl_dreiviertel_badezimmer" "material_id"
## [45] "anzahl_wohnungen" "terrassen_größe"
## [47] "schuppen_größe" "baujahr"
## [49] "anzahl_stockwerke" "flag_kamin"
## [51] "steuern_gebäude" "steuern_total"
## [53] "steuer_year" "steuern_grundstück"
## [55] "steuern_property" "steuer_delinquency"
## [57] "steuer_delinquency_year" "censustractandblock"
Für die weitere Arbeit ist es notwendig zwischen metrischen und nicht metrischen Features zu unterscheiden.
Nicht metrische Daten sind hierbei Features wie Qualität_ID oder Heizung_ID
Nun werden nur die metrischen Variablen, welche später als Grundlage für die PCA dienen betrachtet. Zunächst werden alle Features mit dem Datentyp Character und Ordinale bzw. Nominale Feautres aus dem Datensatz entfernt.
Verbleibende Features:
## [1] "keller_größe" "anzahl_badezimmer"
## [3] "anzahl_schlafzimmer" "anzahl_badezimmer_calc"
## [5] "erdgeschoss_größe_finished" "wohnfläche_gesamt_finished_calc"
## [7] "größe_finished_Wohnfläche" "größe_perimeterlivingarea_finished"
## [9] "größe_gesamt_finished" "finishedsquarefeet50"
## [11] "Fläche_gesamt_unfished_finished" "anzahl_kamine"
## [13] "anzahl_vollstä_badezimmer" "anzahl_garagen"
## [15] "garage_größe_gesamt" "grundstück_größe"
## [17] "anzahl_pools" "pool_größe_gesamt"
## [19] "anzahl_räume" "anzahl_dreiviertel_badezimmer"
## [21] "anzahl_wohnungen" "terrassen_größe"
## [23] "schuppen_größe" "anzahl_stockwerke"
## [25] "steuern_gebäude" "steuern_total"
## [27] "steuern_grundstück"
Als nächstes muss überprüft werden, wie hoch der Anteil der NAs in den verbleibenden Features ist. Features mit den einem Anteil von weniger als 50 % NAs werden beibehalten.
Es bleiben übrig:
## [1] "anzahl_wohnungen" "grundstück_größe"
## [3] "größe_finished_Wohnfläche" "anzahl_badezimmer_calc"
## [5] "anzahl_vollstä_badezimmer" "steuern_grundstück"
## [7] "steuern_gebäude" "wohnfläche_gesamt_finished_calc"
## [9] "steuern_total" "anzahl_räume"
## [11] "anzahl_badezimmer" "anzahl_schlafzimmer"
Bei den verbleibenden Features wird ersichtlich, dass “größe_finished_Wohnfläche”, “anzahl_vollstä_badezimmer”, “anzahl_badezimmer” redunant sind und somit ebenfalls entfernt werden müssen.
## [1] "Anzhal der unterschiedlichen Rows zwischen anzahl_badezimmer und anzahl_badezimmer_calc: "
## [1] anzahl_badezimmer anzahl_badezimmer_calc
## <0 Zeilen> (oder row.names mit Länge 0)
## [1] "Wert 0 innerhalb der Spalte anzahl_badezimmer: 113470 ."
Beide Features enthalten die selben informationen.Anzahl Badezimmer weisst auffällig viele “0” auf. Da es eher für unrealistisch erachtet wird, das ein/e Haus/Wohnung kein Bad hat, wird anzahl_badezimmer_calc beibehalten, da davon auszugehen ist, das die 0 vermutlich NA sein sollten. Anzahl_vollstän_Badezimmer wird ebefalls aus dem Datensatz entfernt, da dieser “halbe” Bäder nicht berücksichtigt. In den USA gilt ein Bad nicht als vollständig wenn z.B nicht alle Geräte sink + toilet + bathtub + shower vorhanden sind. So zählt ein Bad ohne Badewanne nicht als vollständiges Bad.
größe_finished_wohnfläche und wohnfläche_gesamt_finished_calc:
## [1] "Ähnlich verhält es sich mit größe_finished_Wohnfläche und wohnfläche_gesamt_finished_calc. Hier beträgt die Anzahl an ungleichen Rows: "
## [1] größe_finished_Wohnfläche wohnfläche_gesamt_finished_calc
## <0 Zeilen> (oder row.names mit Länge 0)
## [1] " Summe von NA in größe_finished_Wohnfläche: 264431 Summe von NA in wohnfläche_gesamt_finished_calc: 45097 Da wohnfläche_gesamt_finished_calc weniger NAs beinhaltet wird dieses Feature behalten."