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) -> 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], color='red') # 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 ~ year + mileage + tax + mpg + engineSize + brand, data=df_cars) summary(reg) reg = lm(price ~. , 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? # b) Analysieren Sie die Daten und versuchen Sie händisch ein geeignetes Modell für die Vorhersage zu entwickeln. df_basketball %>% group_by(combined_shot_type) %>% summarise(treffer_wahrscheinlichkeit = mean(shot_made_flag), count = n()) df_basketball %>% ggplot(aes(x=loc_x, y=loc_y, color=shot_distance)) + geom_point() + theme_bw() + facet_wrap(~shot_made_flag) # c) Trainieren und evaluieren Sie einen Entscheidungsbaum zur Vorhersage der einzelnen Würfe. Achten Sie darauf einen # Train-Test Split zu verwenden. trainIDx = sample(seq(nrow(df_basketball)), 0.75*nrow(df_basketball)) train = df_basketball[trainIDx, ] test = df_basketball[-trainIDx, ] fit <- rpart(shot_made_flag ~ ., data=train, method='class') rpart.plot(fit) fit <- rpart(shot_made_flag ~ ., data=train, method='class', control = rpart.control(cp = 0.00001)) #rpart.plot(fit) test$prediction = predict(fit, test, type = 'class') confusionMatrix = table(test$shot_made_flag, test$prediction) (confusionMatrix[1,1] + confusionMatrix[2,2])/sum(confusionMatrix) train$prediction = predict(fit, train, type = 'class') confusionMatrix = table(train$shot_made_flag, train$prediction) (confusionMatrix[1,1] + confusionMatrix[2,2])/sum(confusionMatrix) # 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? df_cs %>% mutate(most_money = if_else(ct_money >= t_money, 'CT', 'T')) %>% mutate(most_money_win = most_money == round_winner) %>% summarise(mean(most_money_win)) # b) Welche Variablen sind besonders geeignet den Sieger vorherzusagen? trainIDx = sample(seq(nrow(df_cs)), 0.75*nrow(df_cs)) train = df_cs[trainIDx, ] test = df_cs[-trainIDx, ] fit <- rpart(round_winner ~ ., data=train, method='class') rpart.plot(fit) # c) Wie gut kann ein Entscheidungsbaum den Ausgang einer unbekannten Runde vorhersagen? test$prediction = predict(fit, test, type = 'class') confusionMatrix = table(test$round_winner, test$prediction) (confusionMatrix[1,1] + confusionMatrix[2,2])/sum(confusionMatrix) train$prediction = predict(fit, train, type = 'class') confusionMatrix = table(train$round_winner, train$prediction) (confusionMatrix[1,1] + confusionMatrix[2,2])/sum(confusionMatrix) df_cs %>% mutate(player_diff = ct_players_alive - t_players_alive, health_diff = ct_health - t_health, armor_diff = ct_armor - t_armor, money_diff = ct_money - t_money) -> df_cs train = df_cs[trainIDx, ] test = df_cs[-trainIDx, ] fit <- rpart(round_winner ~ ., data=train, method='class') rpart.plot(fit) test$prediction = predict(fit, test, type = 'class') confusionMatrix = table(test$round_winner, test$prediction) (confusionMatrix[1,1] + confusionMatrix[2,2])/sum(confusionMatrix) train$prediction = predict(fit, train, type = 'class') confusionMatrix = table(train$round_winner, train$prediction) (confusionMatrix[1,1] + confusionMatrix[2,2])/sum(confusionMatrix)