Cómo realizar una Regresión Lineal por grupo en PySpark?
El objetivo es realizar una regresión lineal para cada usuario de manera escalable en PySpark. Características: x1
y x2
. Resultado: y
Ecución de regresión (intercepto cero): y = m(x1) + n(x2)
Ejemplo:
pdf = pd.DataFrame(
{
"user": [1, 1, 1, 2, 2, 2],
"x1": [1, 2, 3, 1, 2, 3],
"x2": [2, 3, 4, 5, 6, 7],
"y": [2, 4, 6, 3, 6, 9],
}
)
df = sc.createDataFrame(pdf)
df.show()
Los datos se ven así:
+----+---+---+---+
|user| x1| x2| y|
+----+---+---+---+
| 1| 1| 2| 2|
| 1| 2| 3| 4|
| 1| 3| 4| 6|
| 2| 1| 5| 3|
| 2| 2| 6| 6|
| 2| 3| 7| 9|
+----+---+---+---+
davy.ai
Para realizar una regresión lineal para cada usuario de manera escalable en PySpark con las características
x1
yx2
y la saliday
, podemos seguir estos pasos:user
.Para cada grupo, crear un
VectorAssembler
que junte las columnasx1
yx2
en un vector de características llamadofeatures
.Ajustar un modelo de
LinearRegression
utilizando las características ensambladasfeatures
y la columna de saliday
.Aplicar el modelo ajustado a la columna
features
para obtener los valores predichos y guardar las columnasuser
,features
,y
ypredicted_y
como un nuevo dataframe.El código para realizar esta regresión lineal es:
El dataframe resultante debería lucir así:
Es importante tener en cuenta que los valores predichos pueden diferir ligeramente debido al parámetro de tolerancia predeterminado en el algoritmo de regresión lineal.