Si bien la respuesta que se marcó aquí es correcta, creo que usted estaba buscando una explicación diferente para averiguar lo que sucedió en su código. Tuve exactamente el mismo problema ejecutando a través de un modelo.
Esto es lo que pasa: Estás entrenando tu modelo con la variable predicha como parte de tu conjunto de datos. He aquí un ejemplo de lo que me ocurría sin darme cuenta:
df = pd.read_csv('file.csv')
df.columns = ['COL1','COL2','COL3','COL4']
train_Y = train['COL3']
train_X = train[train.columns[:-1]]
En este código, quiero predecir el valor de 'COL3'... pero, si nos fijamos en train_X, le estoy diciendo que recupere todas las columnas excepto la última, por lo que su entrada COL1 COL2 y COL3, no COL4, y tratando de predecir COL3 que es parte de train_X.
Corregí esto simplemente moviendo las columnas, moví manualmente COL3 en Excel para que fuera la última columna en mi conjunto de datos (ahora ocupando el lugar de COL4), y luego:
df = pd.read_csv('file.csv')
df.columns = ['COL1','COL2','COL3','COL4']
train_Y = train['COL4']
train_X = train[train.columns[:-1]]
Si no quieres moverlo en Excel, y quieres hacerlo por código entonces:
df = pd.read_csv('file.csv')
df.columns = ['COL1','COL2','COL3','COL4']
train_Y = train['COL3']
train_X = train[train.columns['COL1','COL2','COL4']]
Observe ahora cómo he declarado train_X, para incluir todas las columnas excepto COL3, que forma parte de train_Y.
Espero que eso ayude.