library(tidyverse) library(rpart) if(!require(rpart.plot)){ install.packages("rpart.plot") library(rpart.plot) } # Aufgabe 1 df_cars = read_csv('https://github.com/NikoStein/dma_data/raw/main/cars.csv') # a) Sie vermuten einen Zusammenhang zwischen dem Alter und dem Wert eines Fahrzeuges. Stellen Sie den # Zusammenhang grafisch dar und quantifizieren Sie ihn. df_cars %>% mutate(age = 2021 - year) %>% filter(age < 50) -> df_cars df_cars %>% ggplot(aes(x=age, y=price)) + geom_point() + theme_bw() reg = lm(price ~ age, data=df_cars) summary(reg) df_cars %>% ggplot(aes(x=age, y=price)) + geom_point() + theme_bw() + geom_abline(intercept = reg$coefficients[1], slope = reg$coefficients[2]) # b) Der Datensatz enthält weitere interessante Informationen. Probieren Sie den Erklärungsgehalt Ihres # Modells zu vebessern und interpretieren Sie die jeweiligen Ergebnisse. reg = lm(price ~ age + brand, data=df_cars) summary(reg) reg = lm(price ~ ., data=df_cars) summary(reg) reg = lm(price ~ age + brand + mileage + engineSize, data=df_cars) summary(reg) # Aufgabe 2 df_basketball = read_csv2('https://github.com/NikoStein/dma_data/raw/main/basketball_complete.csv') # a) Um welche Art von Lernproblem handelt es sich? # Klassifikation # b) Analysieren Sie die Daten und versuchen Sie händisch ein geeignetes Modell für die Vorhersage zu entwickeln. df_basketball %>% ggplot(aes(x=loc_x, y=loc_y, color=as.factor(shot_made_flag))) + geom_point(alpha = 0.3) + theme_bw() + coord_fixed() + facet_wrap(~combined_shot_type) df_basketball %>% group_by(combined_shot_type) %>% summarise(tq = mean(shot_made_flag), count = n()) trainIDX = sample(seq(nrow(df_basketball)), 0.75*nrow(df_basketball)) df_train = df_basketball[trainIDX, ] df_test = df_basketball[-trainIDX, ] fit = rpart(shot_made_flag ~ ., data = df_train, method='class', control = rpart.control(cp = 0.0001)) rpart.plot(fit) df_train$prediction = predict(fit, df_train, type='class') df_test$prediction = predict(fit, df_test, type='class') df_train %>% mutate(prediction_correct = prediction == shot_made_flag) -> df_train df_test %>% mutate(prediction_correct = prediction == shot_made_flag) -> df_test df_train %>% summarise(score = mean(prediction_correct)) df_test %>% summarise(score = mean(prediction_correct)) # c) Trainieren und evaluieren Sie einen Entscheidungsbaum zur Vorhersage der einzelnen Würfe. Achten Sie darauf einen # Train-Test Split zu verwenden. for (i in c(0.01, 0.001, 0.0001, 0.00001)){ df_train = df_basketball[trainIDX, ] df_test = df_basketball[-trainIDX, ] fit = rpart(shot_made_flag ~ ., data = df_train, method='class', control = rpart.control(cp = i)) df_train$prediction = predict(fit, df_train, type='class') df_test$prediction = predict(fit, df_test, type='class') df_train %>% mutate(prediction_correct = prediction == shot_made_flag) -> df_train df_test %>% mutate(prediction_correct = prediction == shot_made_flag) -> df_test print(i) df_train %>% summarise(score = mean(prediction_correct)) %>% print(.) df_test %>% summarise(score = mean(prediction_correct)) %>% print(.) } # Aufgabe 3 df_cs = read_csv('https://github.com/NikoStein/dma_data/raw/main/csgo.csv') # a) Wie oft gewinnt das Team mit dem meisten Geld? # b) Welche Variablen sind besonders geeignet den Sieger vorherzusagen? # c) Wie gut kann ein Entscheidungsbaum den Ausgang einer unbekannten Runde vorhersagen?