My NN has less than 1% accuracy rate, what's wrong with my model/dataset? Data info

X_train.shape


(20160, 44)

y_train.shape


(20160,)

#first row of the dataset
X_train.values[0]


array([93., 87., 85., 79., 78., 74., 64., 60., 60., 56., 51., 41., 37.,
       36.,  0., 36.,  0., 31.,  0.,  0., 32.,  0.,  0., 31.,  0., 23.,
       22., 17.,  0.,  0., 14.,  0., 12.,  8.,  5.,  1.,  0.,  0.,  0.,
        0.,  0.,  0.,  0.,  0.])

y_train.values[0]


106.0

Neural Network

n_cols = len(X_train.columns)
es = EarlyStopping(patience = 5)
adam = Adam(lr = 0.0001)
model = Sequential()
model.add(Dense(n_cols, activation = 'relu', input_shape = (n_cols,)))
model.add(Dense(50, activation = 'relu'))
model.add(Dense(50, activation = 'relu'))
model.add(Dense(1, activation = 'sigmoid'))

model.compile(optimizer = adam, loss = 'mean_squared_error', metrics = ['accuracy'])

history = model.fit(X_train, y_train, batch_size = X_train.shape[0], epochs = 100, validation_data = (X_test, y_test), callbacks = [es], verbose = 0)


The code above gives me a maximum accuracy of around 0.0025, I've also tried normalising X_train but same results.

A linear regression with the exact same data returns an R2 of 0.97
You note that y_train.values[0] returns 106.0 - is that correct? Sigmoid activation binds the output to between 0 and 1, so it's not possible for it to predict a 106.

Try changing the activation for your final layer to relu too. 

You should also switch to a more regression-appropriate metric like mean_squared_error or R2. Accuracy is more of a classification thing.