Si bien la respuesta que se marcó aquí es correcta, creo que estaba buscando una explicación diferente para averiguar qué sucedió en su código. Tuve exactamente el mismo problema al ejecutar un modelo.
Esto es lo que está sucediendo: está entrenando su modelo con la variable predicha como parte de su conjunto de datos. Aquí hay un ejemplo de lo que me estaba ocurriendo sin siquiera notarlo:
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 observa train_X, le digo que recupere todas las columnas excepto la última, por lo que ingresa COL1 COL2 y COL3, no COL4, e intentando predecir COL3, que es parte de train_X.
Lo corregí simplemente moviendo las columnas, moví manualmente COL3 en Excel para ser la última columna en mi conjunto de datos (ahora tiene lugar 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 desea moverlo en Excel, y solo quiere 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 es parte de train_Y.
Espero que eso ayude.