EDIT: después de pensar en esto por un poco más, estoy convencido de que usted realmente no necesita regresión ordinal. Consulte a continuación para ver el motivo.
El diagrama de dispersión muestra claramente una relación no lineal. Esto era de esperar, debido a que el predictor (X) es una variable continua (la Media.Rating), mientras que la respuesta es una variable ordinal (Mi.Rating). Una constante a trozos función es, por supuesto, no lineal. En este caso, el rango de correlación de Spearman sería más adecuado medida de correlación de Pearson el coeficiente de correlación. De todos modos, tienes razón en su intuición de que hay una conexión entre la Media.Clasificación y Mi.Clasificación de la prueba de correlación, se rechaza la hipótesis de un nulo coeficiente de correlación), pero la correlación es débil debido a la gran variabilidad. En otras palabras, para un dado a Mi.Clasificación, el diagrama de dispersión muestra claramente que hay dos libros con muy alto Promedio.Clasificación y libros con Media muy baja.Clasificación. También podemos ver esta numéricamente con
books <- read.csv("books.csv")
rated <- books[books$My.Rating != 0, ]
library(dplyr)
mysummary<- rated %>% group_by(My.Rating) %>% summarize(min = min(Average.Rating), IQR = IQR(Average.Rating), median = median(Average.Rating), mean = mean(Average.Rating), max = max(Average.Rating)) %>% arrange(My.Rating)
mysummary
# Source: local data frame [5 x 6]
#
# My.Rating min IQR median mean max
# <int> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 1 3.79 0.2250 3.82 3.950000 4.24
# 2 2 3.61 0.2800 3.84 3.928095 4.45
# 3 3 3.49 0.3950 3.88 3.955686 4.36
# 4 4 3.53 0.2975 3.98 4.007604 4.49
# 5 5 3.64 0.2650 4.07 4.059800 4.44
Como A Mi.Clasificación de los aumentos de 1 a 5, la media, y especialmente la mediana de la Media.Clasificación de aumentar, pero la dispersión de la Media.Clasificación, cuantificado por IQR o max - min, sigue siendo amplia. Podemos ver esta muy bien con un boxplot:
rated$My.Rating <- as.factor(rated$My.Rating)
ggplot(rated,aes(x = Average.Rating, y = My.Rating)) + geom_boxplot()+coord_flip()
el boxplot muestra claramente que, como la mediana de la Media.Clasificación de los aumentos, Mi.Clasificación también aumenta, sin embargo, existe una gran dispersión entre este valor de la mediana. Esta es la razón por la que usted no puede obtener un buen (exacta) de regresión de Mi.Clasificación por sobre el Promedio.Clasificación, ya sea que usted use regresión ordinal o no. Otro punto interesante es que usted no tiene realmente bajo de la Media.Calificaciones (el mínimo es de 3.49), mientras que usted tiene muy baja Mi.Las calificaciones. Esto es en parte debido al efecto de suavizado de la media.
Para obtener mejores resultados usted necesita agregar predictores, la cual debe estar relacionada con su respuesta, y posiblemente no muy correlacionados entre sí. Después de haber tenido la posibilidad de ver los datos, yo creo que no se puede hacer mucho mejor, a menos que recopilar más datos. Usted tiene una clasificación de las Estanterías variable) de algunos libros (no todos), pero algunos de los libros que pertenecen a más de una categoría. Usted podría tratar de crear columnas adicionales para cada categoría, es decir, ficción, humor, etc., y por cada libro que iba a poner un 1 (o VERDADERO) si el libro pertenece a la categoría de $j$, de lo contrario deje en 0 (o FALSO). Entonces usted puede comprobar si estas variables ayuda a la predicción de Mi.Clasificación. Este es el "más simple" mejora puede probar con los datos en la mano. Sin embargo, creo que tendría mejor suerte si usted podría reunir más datos, debido a que su verdadero problema es que al agregar a todos los comentarios en un solo número (el promedio de la calificación), de deshacerse de valiosa información, y la hemorragia de la potencia estadística. Dos posibles caminos:
- Usted sería capaz de predecir Mi.Clasificación mucho mejor, si para cada libro, se puede recuperar la calificación de todos los revisores que examinó ese libro, no sólo la media. Supongamos que usted tiene $N$ personas en total. A continuación, para cada libro $i$, usted debe tener un vector de longitud $N$, cuya entrada $r_j$ es la revisión de revisor $j$, en caso de que él/ella revisó el libro, o un
NA
valor en caso de que ella/él no lo hizo. Si usted tiene acceso a este tipo de datos, se puede utilizar un sistema de recomendación algoritmo, como por ejemplo el Filtrado Colaborativo. Otra opción sería la regresión ordinal, según lo sugerido por @ArneJonasWarnke. Sin embargo, no creo que usted está realmente interesado en conseguir un Mi.Clasificación de exactamente 5, o 4, etc. Supongo que también sería feliz con una calificación de 4.95, es decir, con un continuo de respuesta, en lugar de a un ordinal. Después de todo, si, para el libro de $i$, el modelo predice que usted le daría una puntuación media de, digamos, 4.96, usted podría considerar la posibilidad de que vale la pena leer, ¿verdad? Esto significa que usted podría simplificar su vida por el uso de algún tipo de regularización lineal de regresión, en lugar de regularización de la regresión ordinal. En este caso, el LAZO y la cresta de regresión son sus amigos (véase, por ejemplo, el paquete glmnet
). Recuerde que con este enfoque necesita de regularización, porque es probable que haya mucho más que los revisores de los libros, es decir, mucho más predictores de observaciones.
- de una forma más simple (y probablemente menos eficaz) alternativa sería la de recuperar algunas estadísticas de la revisión de las distribuciones, en lugar de simplemente el promedio de revisión. Por ejemplo, si por cada libro que usted puede encontrar el número de 1 estrella en los comentarios, el número de 2 estrellas, comentarios, etc., a continuación, utilizando estos datos como extra predictores, se podría construir una regresión lineal con alguna posibilidad de éxito. De nuevo, si realmente quería un ordinal respuesta, es decir, si una respuesta de 3.7 es inaceptable para usted, entonces usted necesita para cambiar a la regresión ordinal o SVM multiclase. Yo realmente no veo por qué agitar un avispero, aunque.