Getting negative coef_ when expecting positive?

Viewed 71

I am doing a linear regression analysis on a dataset of houses (found here: https://www.kaggle.com/shree1992/housedata). I have the following code(see image1): image1

The image shows that when I print the average price for each number of bedrooms the trend is that the price rises with a larger number of bedrooms. When doing a single linear regression I get a positive coef_ on bedrooms, which is what I expected. (see image 2) image 2

Though when I do a multiple linear regression(adding more features/columns) on the dataset and prints the coef_ I get a negative coef_ for bedrooms (see image3). image3

How does this make sense when the average price increases with more bedrooms?

houses_preprocessed = houses[
    (houses.price<1.2*10**7) &
    (houses.bedrooms>0) &
    (houses.bedrooms <= 6) &
    (houses.bathrooms>0) &
    (houses.price>8000)].drop(columns=['country', 'date', 'street', 'city'])


houses_preprocessed.loc[houses_preprocessed['yr_renovated'] < 1, 'yr_renovated'] = 0
houses_preprocessed.loc[houses_preprocessed['yr_renovated'] > 1, 'yr_renovated'] = 1


X = houses_preprocessed[['bedrooms', 'bathrooms', 'sqft_living', 'sqft_lot', 'floors', 'waterfront', 'view', 'condition', 'sqft_above', 'sqft_basement', 'yr_built', 'yr_renovated']]
y = houses_preprocessed[['price']]

X_train, X_test, y_train, y_test = train_test_split(X,y)

reg = LinearRegression()
reg.fit(X_train, y_train)

K=reg.coef_
K


coef_dict = {}
for K, name in zip(K,X):
    coef_dict[name] = K
coef_dict

# Create a list of tuples sorted by index 1 i.e. value field 
listofTuples = sorted(coef_dict.items(), key=lambda e:e[1])

# Iterate over the sorted sequence
for elem in listofTuples :
    print(elem[0] , " ::" , elem[1] )
0 Answers
Related