Prosta analiza odchyleń (outliers) w Power BI z wykorzystaniem programu R

Dzisiejszy post będzie bardzo krótki, natomiast wynika to też z faktu, że w PowerBI Desktop w połączeniu z “R” możemy uzyskać świetne rezultaty małym nakładem pracy. “Outliers”, czyli wartości, które są skrajnie różne od pozostałych w badanej domenie mogą zniekształcić wynik analiz. Czasami to one będą stanowić najciekawsze punkty obserwacyjne, natomiast w większości przypadków będą “zakłamywać” faktyczny obraz. Weźmy pod uwagę na przykład analizę sprzedaży względem klinetów. Jeżeli stu klientów zamówi średnio po 3 produkty, natomiast stupierwszy zamówi nagle 50 produktów to z badania średniej arytmetycznej będzie wynikać, że klienci średnio kupują po 3.5 produktu. Oczywiście w powyższym przykładzie dość łatwo można by było znaleźć anomalię, ale w dużym zbiorze danych zadanie to jest znacznie trudniejsze. Chciałbym również dodać, że obliczanie dodatkowych miar, między innymi odchylenia standardowego może nam dać dodatkowe informacje o zróżniocowaniu, natomiast ciężko jest stwierdzić, które wartości to odchylenia i jaki powinno się przyjąć próg oznaczenia ich jako istotnych lub nie.

Z pomocą może przyjść PowerBI Desktop z dodatkiem “R”. W poniższym przykładzie do analizy wybrano dwa atrybuty: “Account Number” oraz “Order Quantity”, a celem było znalezienie wartości skrajnych oraz wartości, która pozwoliła by określić granicę wartości skrajnych. Można to osiągnąc wykorzystując prosty wykres programu “R” i zaledwie dwie linijki kodu:

colnames(dataset) <- c("OrderQuantity","AccountNumber")
plot(dataset$OrderQuantity )

Jak widać na powyższym zrzucie raport pokazuje jak wiele było przypadków z kolejnymi wielkościami zamówień. Dzięki prostej analizy wykresu jesteśmy w stanie stwierdzić, że klienci, którzy zamawiali więcej niż 20 produktów to sporadyczne przypadki, które mogą zniekształcić końcowe wyniki.

Wykorzystując dodatkowe wielkości statystyczne można poznać jeszcze więcej szczegółów.

library(gridExtra)
colnames(dataset) <- c("OrderQuantity","AccountNumber")
x <- matrix(c("Value"), ncol=1)
number_of_rows <- nrow(dataset)
min_value <- min(dataset$OrderQuantity)
max_value <- max(dataset$OrderQuantity)
median_value <- median(dataset$OrderQuantity)
mean_value <- mean(dataset$OrderQuantity)
sd_value <- sd(dataset$OrderQuantity)
y <- rbind(x, number_of_rows)
y <- rbind(y, min_value)
y <- rbind(y, max_value)
y <- rbind(y, median_value)
y <- rbind(y, mean_value)
y <- rbind(y, sd_value)
grid.table(y)

W przypadku wszystkich danych (18484 rekordów) średnia arytmetyczna wynosiła 3.27, natomiast odchylenie standardowe 2.62. Dzięki dodaniu do raportu filtru i usunięciu wartości skrajnych wynik będzie oczywiście inny.

Jak widać na załączonym zrzucie w drugim przypadku analizowane były 18448 rekordy, czyli o 40 rekordów mniej poprzednio. Po usunięciu wartości skrajnych wartość średnia wynosi 3,20, natomiast odchylenie standardowe spadło do 1.84. Jak widać usunięcie – stosunkowo – niewielkiej ilości danych przyniosło – stosunkowo – duże zmiany w analizie danych.

Slawomir Drzymala
Follow me on

Leave a Reply