# Predicting energy consumption of households

I have the dataset which you can find here, containing many different characteristics of different houses, including their types of heating, or the number of adults and children living in the house. In total there are about 500 records. I want to use an algorithm, that can be trained using the dataset above, in order to be able to predict the electricity consumption of a house that is not in the set.

I have tried every possible machine learning algorithm (using weka) (linear regression, SVM etc) . However I had about 350 mean absolute error, which is not good. I tried to make my data to take values from 0 to 1, or to delete some characteristics. I did not managed to find some good results.

I also tried to use R tool, and I did not have good results either...

I would be very grateful, if someone could give me some advice, or if you could examine a little the dataset and run some algorithms on it. What type of preprocessing should I use, and what type of algorithm?

I have posted a similar question last month, but I did not get any useful answers.

• machine learning is powerful but not magic. do you have any control over what inputs are recorded? its crucial to find/record inputs that really influence the outputs (either proportionally or inversely or through more complex relationships). just because they are recorded or someone came up with the idea does not mean inputs influence outputs. plotting one input vs output should reveal some pattern, & not a random scatterplot. it doesnt look like data records the fact that people have different heating preferences independent of everything else! etc! & what about all energy-consuming devices? – vzn Apr 24 '13 at 3:10
• this might make a good sample exercise to work thru in chat, reply there if interested – vzn Apr 24 '13 at 3:18
• The fact that you "tried every algorithm" (which I doubt) alone is not helpful. How did you apply them? How did you treat your multi-dimensional data? – Raphael Apr 24 '13 at 6:31
• Note that there are two questions on Cross Validated. You should consider that something is wrong with your question and/or your expectations. Re- and crossposting does not help. – Raphael Apr 24 '13 at 6:44
• fyi here is a new startup kaggle with (some free) services in the area dedicated to data prediction that may be an option for some & stackexchange has worked with them also. – vzn Apr 24 '13 at 14:50

I am not an expert in machine learning, but here is one problem: most of your data is binary. Since you have many such paramters, very little can be derived in terms of correlation between any given parameter and the target quantity. Therefore, statistic methods will have a hard time.

Furthermore, you have a small data set but many parameters. Get rid of some.

Another problem can be that you have mutually exclusive data: for example, the first three parameters (URBAN, RURAL and MOUNTAINOUS) can not be set at the same time. You might want to combine them into one category parameter; thus, the algorithms don't have to find a multi-dimensional anti-correlation and correlate the vector to energy consumption, but use that one parameter directly. Note how this also reduces the number of parameters.
If you can make assumptions about which areas inherently cause more energy consumption, consider turning the parameter into an appropriate interval (of reals).

As a general rule, machine learning is what you do if other methods don't work. In this case, I don't see the need for machine learning unless you show that reasonable other approaches fail.

For instance: Research energy consumption of the appliances you have parameters for and assume average values resp. values fitting the total area covered. Research and/or make reasonable assumptions for the number of light bulbs, air conditioning, etc based on total area. If this does not already solve your problem, it should reduce the number of parameters with unknown influence.

You should use a scoring system. A simple system is to use a weighting of 1.0 for every column. With each input record you would match all the fields to each record of the dataset. If a field matches then that dataset record will have it's matching score increased by 1.0 (the weight). After matching all fields, the dataset record with the highest score wins and it's TOTAL_CONSUMPTION amount is taken as the value to apply to the input record.

That is the simple way. A better way would be to weight each column as you see fit. For example you might give POOL a weight of 0.2 and FLOOR_HEATING a weight of 0.8.

So far I have been inferring that an exact match only is counted. A further step would be to scale the weighting based on the closeness of the matched field values. So the ADULTS column could have a weighting of 2.5. If the input record has 3 ADULTS and a dataset record has 5 ADULTS then you could take the difference as 2 (=5-3) and then divide the weight by that, leaving a score of 1.25.

One further step would be to average the TOTAL_CONSUMPTION from all matching dataset records, based on their score.