Представление непрерывных переменных, сгенерированных категориальными переменными `group_by`, в модель ML - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь найти лучший способ обработки моих данных (в вызове фрейма данных x). В настоящее время я пишу функцию, которая будет принимать переменную Cust_ID, group_by и вычислять среднюю цену для этих Cust_ID и ID_code.

То, что я сейчас делаю, берет y и генерирует разреженную матрицу, и когда ID_code совпадает с разреженной матрицей, 1 внедряется в ячейку. (Похоже на фиктивные переменные / горячее кодирование, но у меня больше уникальных столбцов, чем уникальных ID_code).

Чем больше уникальных столбцов создает y, у которого больше уникальных наблюдений, чем в x$ID_code (у которого 8001:8005).

Во-первых, вычислите mean Price, во-вторых, сгенерируйте последовательность y. В-третьих, создайте матрицу, заполненную zero и ones. Наконец, свяжите исходные данные x вместе с недавно созданным matrix.

   x <- x %>%
  group_by(Cust_ID, ID_code) %>%
  mutate(mean_cust_price = mean(price)) %>%
  ungroup()

y <- seq(8000:8010)
y <- y + 8000
y <- as.data.frame(y)

##############################################################################
matrixDATA <-  matrix(y$y, byrow = TRUE,
                           nrow = length(x$ID_code),
                            ncol = length(y$y),
                            dimnames = list(1:nrow(x), y$y))

 for(i in 1:ncol(matrixDATA)){
   matrixDATA[, i] <- matrixDATA[, i] == as.integer(x$ID_code)
 }

x_clean <- cbind(x, matrixDATA)
##############################################################################

Эта часть все работает, как я хочу и ожидаю. Однако я хочу включить переменную mean_cust_price. Создание новой разреженной матрицы не является правильным методом для этой непрерывной переменной, но я суммирую, как хочу показать (модель машинного обучения), что когда ID_code = 8002 и Cust_ID = 11, тогда средняя цена равна p 982212.963.

Я просто пытаюсь понять, как я могу передать это модели ML.

Например:

Мои данные о происхождении выглядят так:

# A tibble: 200 x 4
   Cust_ID ID_code   price mean_cust_price
     <dbl>   <dbl>   <dbl>           <dbl>
 1    11.0    8002  365000          982213
 2    11.0    8004  193000          355850
 3    11.0    8003  690000          532776
 4    11.0    8004  195000          355850
 5    11.0    8003  558000          532776
 6    10.0    8004     900            1100
 7    10.0    8002    1200            1189
 8    11.0    8003 1100000          532776
 9    11.0    8004  480000          355850
10    11.0    8001  295000          377793

У меня есть категориальные переменные, такие как ID_code, которые я spread выводил в матрицу.

Окончательные данные выглядят так:

  Cust_ID ID_code  price mean_cust_price 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010
1      11    8002 365000        982213.0    0    1    0    0    0    0    0    0    0    0
2      11    8004 193000        355850.0    0    0    0    1    0    0    0    0    0    0
3      11    8003 690000        532775.8    0    0    1    0    0    0    0    0    0    0
4      11    8004 195000        355850.0    0    0    0    1    0    0    0    0    0    0
  8011
1    0
2    0
3    0
4    0

Таким образом, я могу представить переменную Cust_ID, но я также хочу представить переменную mean_cust_price, поскольку в зависимости от Cust_ID и ID_code число значительно меняется.

Как мне лучше всего это представить?

Текущий формат может быть передан в модель ML (после удаления переменных ID и цены) в формате разреженной матрицы.

Данные:

x <- structure(list(Cust_ID = c(10, 11, 11, 10, 10, 11, 10, 10, 11, 
11, 10, 11, 10, 11, 10, 11, 11, 11, 11, 10, 10, 11, 11, 10, 11, 
11, 11, 11, 10, 11, 11, 11, 11, 11, 10, 11, 10, 10, 10, 10, 11, 
10, 11, 11, 11, 10, 10, 10, 10, 11, 10, 10, 10, 10, 11, 11, 11, 
11, 11, 11, 11, 10, 11, 11, 10, 11, 11, 11, 10, 11, 11, 10, 10, 
10, 11, 11, 11, 11, 10, 11, 11, 11, 11, 10, 11, 11, 10, 11, 10, 
11, 10, 10, 11, 10, 10, 11, 11, 10, 11, 11, 11, 11, 10, 11, 11, 
10, 11, 11, 11, 11, 10, 11, 11, 10, 11, 10, 10, 10, 11, 11, 10, 
11, 10, 11, 10, 11, 11, 11, 11, 11, 11, 10, 11, 11, 11, 10, 10, 
11, 10, 11, 11, 11, 10, 11, 10, 10, 10, 10, 11, 10, 11, 11, 10, 
10, 11, 11, 10, 11, 10, 11, 10, 11, 10, 10, 10, 11, 11, 10, 10, 
11, 10, 11, 11, 10, 10, 11, 10, 11, 11, 10, 10, 11, 11, 11, 10, 
11, 10, 11, 10, 10, 11, 11, 11, 11, 11, 10, 11, 10, 11, 11), 
    ID_code = c(8003, 8002, 8002, 8001, 8003, 8003, 8001, 8001, 
    8002, 8003, 8001, 8003, 8002, 8005, 8004, 8001, 8002, 8004, 
    8001, 8001, 8002, 8003, 8001, 8002, 8003, 8005, 8002, 8001, 
    8005, 8004, 8001, 8003, 8004, 8005, 8002, 8004, 8002, 8003, 
    8003, 8003, 8003, 8002, 8001, 8003, 8003, 8001, 8004, 8001, 
    8002, 8001, 8002, 8003, 8002, 8003, 8001, 8003, 8005, 8001, 
    8003, 8005, 8002, 8002, 8004, 8002, 8005, 8002, 8003, 8001, 
    8001, 8003, 8004, 8001, 8001, 8003, 8004, 8003, 8001, 8001, 
    8001, 8005, 8005, 8003, 8003, 8002, 8005, 8002, 8001, 8002, 
    8002, 8001, 8003, 8003, 8002, 8002, 8001, 8003, 8002, 8001, 
    8001, 8005, 8001, 8001, 8004, 8003, 8003, 8003, 8002, 8004, 
    8002, 8003, 8001, 8001, 8002, 8002, 8001, 8005, 8004, 8001, 
    8004, 8005, 8003, 8002, 8001, 8001, 8001, 8001, 8004, 8001, 
    8004, 8001, 8002, 8004, 8003, 8003, 8002, 8002, 8001, 8001, 
    8003, 8004, 8003, 8003, 8002, 8001, 8003, 8002, 8002, 8003, 
    8003, 8003, 8004, 8002, 8005, 8003, 8003, 8005, 8004, 8003, 
    8004, 8004, 8003, 8002, 8003, 8004, 8003, 8001, 8005, 8005, 
    8005, 8004, 8002, 8001, 8003, 8003, 8003, 8004, 8003, 8005, 
    8005, 8001, 8003, 8003, 8003, 8003, 8001, 8001, 8005, 8001, 
    8002, 8005, 8002, 8001, 8005, 8002, 8005, 8005, 8001, 8003, 
    8003, 8002), price = c(710, 249000, 360000, 2200, 1400, 290000, 
    575, 750, 1e+06, 189000, 1500, 345000, 3300, 429000, 980, 
    195000, 368000, 435000, 1500000, 845, 775, 180000, 832020, 
    1250, 199000, 388000, 410000, 148500, 2100, 420000, 458000, 
    358000, 220000, 770000, 1550, 330000, 2100, 1650, 2500, 1450, 
    175000, 1700, 169500, 174000, 575000, 1200, 1050, 860, 1280, 
    565000, 2800, 1500, 10000, 1200, 239000, 212000, 690000, 
    470000, 350000, 950000, 750000, 1100, 239900, 480000, 1250, 
    485000, 225000, 210000, 1200, 425000, 320000, 1195, 1900, 
    1700, 420000, 148000, 239000, 275000, 2000, 330000, 225000, 
    198000, 360000, 2100, 279000, 525000, 900, 410000, 1200, 
    165000, 950, 4500, 269000, 1250, 900, 330000, 350000, 1250, 
    289000, 7e+05, 109000, 135000, 1200, 320000, 195000, 1600, 
    372000, 170000, 1050000, 522500, 1100, 218000, 117000, 1600, 
    355000, 5400, 1700, 2250, 257000, 790000, 750, 525000, 1650, 
    298000, 1045, 490000, 237500, 169000, 265000, 169000, 375000, 
    1000, 340000, 610000, 6e+05, 2000, 1000, 451000, 1400, 189000, 
    398000, 198000, 1400, 195000, 1200, 1600, 675, 790, 179000, 
    1500, 480000, 605000, 1600, 900, 355000, 712066, 900, 345000, 
    925, 495000, 2100, 349000, 1250, 900, 1700, 590000, 660000, 
    950, 2500, 560000, 1190, 340000, 270000, 1275, 1475, 252000, 
    1120, 680000, 245000, 2100, 1300, 395000, 525000, 398000, 
    1100, 280000, 1400, 135000, 4950, 950, 5e+05, 370000, 470000, 
    253000, 399000, 1600, 270000, 1400, 267000, 2980000), mean_cust_price = c(1492.8, 
    581826.086956522, 581826.086956522, 1310.47619047619, 1492.8, 
    314078.125, 1310.47619047619, 1310.47619047619, 581826.086956522, 
    314078.125, 1310.47619047619, 314078.125, 2191, 544816.625, 
    1081.875, 344300.666666667, 581826.086956522, 330650, 344300.666666667, 
    1310.47619047619, 2191, 314078.125, 344300.666666667, 2191, 
    314078.125, 544816.625, 581826.086956522, 344300.666666667, 
    1972.22222222222, 330650, 344300.666666667, 314078.125, 330650, 
    544816.625, 2191, 330650, 2191, 1492.8, 1492.8, 1492.8, 314078.125, 
    2191, 344300.666666667, 314078.125, 314078.125, 1310.47619047619, 
    1081.875, 1310.47619047619, 2191, 344300.666666667, 2191, 
    1492.8, 2191, 1492.8, 344300.666666667, 314078.125, 544816.625, 
    344300.666666667, 314078.125, 544816.625, 581826.086956522, 
    2191, 330650, 581826.086956522, 1972.22222222222, 581826.086956522, 
    314078.125, 344300.666666667, 1310.47619047619, 314078.125, 
    330650, 1310.47619047619, 1310.47619047619, 1492.8, 330650, 
    314078.125, 344300.666666667, 344300.666666667, 1310.47619047619, 
    544816.625, 544816.625, 314078.125, 314078.125, 2191, 544816.625, 
    581826.086956522, 1310.47619047619, 581826.086956522, 2191, 
    344300.666666667, 1492.8, 1492.8, 581826.086956522, 2191, 
    1310.47619047619, 314078.125, 581826.086956522, 1310.47619047619, 
    344300.666666667, 544816.625, 344300.666666667, 344300.666666667, 
    1081.875, 314078.125, 314078.125, 1492.8, 581826.086956522, 
    330650, 581826.086956522, 314078.125, 1310.47619047619, 344300.666666667, 
    581826.086956522, 2191, 344300.666666667, 1972.22222222222, 
    1081.875, 1310.47619047619, 330650, 544816.625, 1492.8, 581826.086956522, 
    1310.47619047619, 344300.666666667, 1310.47619047619, 344300.666666667, 
    330650, 344300.666666667, 330650, 344300.666666667, 581826.086956522, 
    1081.875, 314078.125, 314078.125, 581826.086956522, 2191, 
    1310.47619047619, 344300.666666667, 1492.8, 330650, 314078.125, 
    314078.125, 2191, 344300.666666667, 1492.8, 2191, 2191, 1492.8, 
    314078.125, 1492.8, 330650, 581826.086956522, 1972.22222222222, 
    1492.8, 314078.125, 544816.625, 1081.875, 314078.125, 1081.875, 
    330650, 1492.8, 581826.086956522, 1492.8, 1081.875, 1492.8, 
    344300.666666667, 544816.625, 1972.22222222222, 1972.22222222222, 
    330650, 2191, 344300.666666667, 314078.125, 1492.8, 1492.8, 
    330650, 1492.8, 544816.625, 544816.625, 1310.47619047619, 
    1492.8, 314078.125, 314078.125, 314078.125, 1310.47619047619, 
    344300.666666667, 1972.22222222222, 344300.666666667, 2191, 
    1972.22222222222, 581826.086956522, 344300.666666667, 544816.625, 
    581826.086956522, 544816.625, 1972.22222222222, 344300.666666667, 
    1492.8, 314078.125, 581826.086956522)), .Names = c("Cust_ID", 
"ID_code", "price", "mean_cust_price"), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -200L), vars = c("Cust_ID", 
"ID_code"), labels = structure(list(Cust_ID = c(10, 10, 10, 10, 
10, 11, 11, 11, 11, 11), ID_code = c(8001, 8002, 8003, 8004, 
8005, 8001, 8002, 8003, 8004, 8005)), row.names = c(NA, -10L), class = "data.frame", vars = c("Cust_ID", 
"ID_code"), drop = TRUE, .Names = c("Cust_ID", "ID_code")), indices = list(
    c(3L, 6L, 7L, 10L, 19L, 45L, 47L, 68L, 71L, 72L, 78L, 86L, 
    94L, 97L, 110L, 117L, 122L, 124L, 136L, 179L, 184L), c(12L, 
    20L, 23L, 34L, 36L, 41L, 48L, 50L, 52L, 61L, 83L, 88L, 93L, 
    113L, 135L, 142L, 145L, 146L, 170L, 188L), c(0L, 4L, 37L, 
    38L, 39L, 51L, 53L, 73L, 90L, 91L, 105L, 120L, 138L, 144L, 
    147L, 149L, 153L, 160L, 162L, 164L, 173L, 174L, 176L, 180L, 
    197L), c(14L, 46L, 102L, 116L, 131L, 156L, 158L, 163L), c(28L, 
    64L, 115L, 152L, 167L, 168L, 186L, 189L, 195L), c(15L, 18L, 
    22L, 27L, 30L, 42L, 49L, 54L, 57L, 67L, 76L, 77L, 89L, 98L, 
    100L, 101L, 111L, 114L, 123L, 125L, 127L, 129L, 137L, 143L, 
    165L, 171L, 185L, 187L, 191L, 196L), c(1L, 2L, 8L, 16L, 26L, 
    60L, 63L, 65L, 85L, 87L, 92L, 96L, 106L, 108L, 112L, 121L, 
    130L, 134L, 151L, 161L, 190L, 193L, 199L), c(5L, 9L, 11L, 
    21L, 24L, 31L, 40L, 43L, 44L, 55L, 58L, 66L, 69L, 75L, 81L, 
    82L, 95L, 103L, 104L, 109L, 132L, 133L, 140L, 141L, 148L, 
    154L, 157L, 172L, 181L, 182L, 183L, 198L), c(17L, 29L, 32L, 
    35L, 62L, 70L, 74L, 107L, 118L, 126L, 128L, 139L, 150L, 159L, 
    169L, 175L), c(13L, 25L, 33L, 56L, 59L, 79L, 80L, 84L, 99L, 
    119L, 155L, 166L, 177L, 178L, 192L, 194L)), drop = TRUE, group_sizes = c(21L, 
20L, 25L, 8L, 9L, 30L, 23L, 32L, 16L, 16L), biggest_group_size = 32L)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...