Jak zawsze zaczniemy od konfiguracji naszych danych. W tym przypadku danymi są wiadomości otrzymane przez naszą fantastyczną firmę The Cake Factory. Znajdują się one w pliku client_messages.RDS, który utworzyliśmy wcześniej. Dane zawierają 300 obserwacji dla 8 zmiennych: SALE_ID, DATE, STARS, SUMMARY, MESSAGE, LAR, LNG i MULT_PURCHASE. W tej sekcji będziemy pracować ze zmiennymi MESSAGE i MULT_PURCHASE.
Skonfigurujemy nasze ziarno tak, aby dawało powtarzalne wyniki. Pamiętaj, że powinno to mieć miejsce przed każdym wywołaniem funkcji, które wiąże się z jakąś randomizacją. Pokażemy to tylko raz, aby zaoszczędzić miejsce i uniknąć powtarzania się, ale miej to na uwadze, próbując wygenerować odtwarzalne wyniki:
set.seed(12345)
Następnie musimy się upewnić, że w odpowiednich zmiennych nie brakuje żadnych danych. Aby to zrobić, używamy funkcji complete.cases() wraz z negacją (!) i funkcją sum(), aby uzyskać całkowitą liczbę wartości NA ‘w każdej zmiennej. Jak widać, nie mamy żadnych brakujących danych:
sum(!complete.cases(client_messages$MESSAGE))
#> 0
sum(!omplete.cases(client_messages$MULT_PURCHASES))
#> 0
Jeśli masz brakujące dane, zamiast korzystać z jakiegoś mechanizmu imputacji, który jest zwykle wykonywany w niektórych scenariuszach analizy danych, chcesz usunąć te obserwacje z tych danych, ponieważ łatwiej jest to błędne ze względu na nieciągłą charakterystykę danych tekstowych. Jak często można się przekonać podczas pracy nad interesującymi rzeczywistymi problemami w analizie predykcyjnej, nierzadko pracuje się z nieproporcjonalnymi danymi. W tym przypadku, jak widać na pokazanym kodzie, mamy około 63% zakupów wielokrotnych. Nie jest to zbyt nieproporcjonalne, ale nadal musimy grać po bezpiecznej stronie, utrzymując dane treningowe i testowe w podobnych proporcjach:
prop.table9tab;e(client_messages$MULT_PURCHASES))
#> FALSE TRUE
#> 0,3621262 0,6378738
W przypadku danych z problemem nieproporcjonalności utrzymanie tych samych proporcji w zestawach testowych i szkoleniowych jest ważne, aby uzyskać dokładne wyniki. Dlatego musimy upewnić się, że nasza metoda próbkowania zachowuje te proporcje. Aby to zrobić, użyjemy funkcji createDataPartitio() z pakietu caret, aby wyodrębnić indeksy dla każdego zestawu uczącego i testowego. Stworzy zbalansowane podziały danych iw tym przypadku wykorzysta 70% danych do uczenia z jedną partycją:
indexes <- createDataPartition(
client_messages$MULT_PURCHASES,
list = FALSE,
times= 1,
p= 0.7
)
trai <- clinet_messages[ idexes, ]
test <- clinet-messages[-indexes, ]
Aby mieć pewność, że nasze proporcje są zachowane, możemy sprawdzić każdy z nich indywidualnie, tak jak robiliśmy to wcześniej z pełnymi danymi:
prop.table(table(train$MULT_PURCHASES))
#> FALSE TRUE
#> 0,3632075 0,6367925
prop.table(table(test$MULT_PURCHASES))
#> FALSE TRUE
#> 0,3595506 0,6404494
Teraz, gdy mamy już gotowe zestawy szkoleniowe i testowe, możemy rozpocząć czyszczenie i konfigurację naszych danych tekstowych, tak jak zrobimy to w następnej sekcji.