Capabilities and Applications of Collaborative Filtering

I recently finished fastai “Deep Learning for Coders”, and am trying to implement what I learned in a self-directed study for my Mechanical Engineering degree.

Ideally, I would like to create a machine-learning control application that opens and closes the blinds in a passive solar house to (1) help achieve the indoor temperature setpoint, and (2) minimize the amount of cooling power used.

This is both a recommender and an optimization problem. Originally, I thought both could be done with one collaborative filtering regression model; however, now I am starting to think that the recommender and optimization problems must be dealt with separately in iterations of

  1. training the machine-learning recommender, and
  2. optimizing the data.

Is anyone able to help me gain some clarity about the capabilities of collaborative filtering models, and how they might best be applied to my problem?

Much appreciated.


This seems like it would probably be more of a time series problem. You could check out Time series/ sequential data study group - #902 by oguiza and see if that is helpful. Otherwise I might not be understanding your problem fully. My understanding is that collaborative filtering is usually a good choice for matching two groups together that might be fairly sparse. Things like shopping recommendation systems (Person A bought items 1,3, and 6, Person B bought 1 and 3, and Person C bought 1 and 6. See if Person B or C is interested in item 6 or item 3 respectively).

1 Like

Hi @simonvincenthk,

I’m sure there are many ways to approach this problem, but I agree with @KevinB that treating it as a time series task might be helpful.
Assuming you have the data, one potential approach would be to train a (single-step or multi-step) forecasting model that predicts room temperature with different levels of opening or closing of the blinds (assuming there are degrees, and it’s not all or nothing). Once you have that, you’d also know the sensitivity of temperature to the degree the blinds are closed (like partial dependence in random forests). With that, you could determine how much do the blinds need to be closed to achieve a target temperature. (As always, easier said than done :grinning:).
Good luck with your project. It looks interesting!


@KevinB and @oguiza,

thank you both for the input. I’ve been working on this project slowly but steadily using the procedure from Chapter 9 of Howard and Gugger as a framework, but am still have some doubts about my approaches to this problem.

I made a dataset using a building energy simulator that has ~52 000 timesteps of the following data:

  • time_min
  • dateAndTime_month
  • dateAndTime_day
  • dateAndTime_hour
  • dateAndTime_minute
  • outdoorTemperature_degC
  • indoorTemperature_degC
  • indoorTemperatureGrad_degCPerMin
  • indoorTemperatureSP_Heating_degC
  • indoorTemperatureSP_Cooling_degC
  • sunAngle_Azimuth_deg
  • sunAngle_Altitude_deg
  • sunAngle_Hour_deg
  • sunIntensity_Diffuse_WperSqm
  • sunIntensity_Direct_WPerSqM
  • districtHeating_J
  • districtCooling_J
  • surfaceShadingDeviceIsOnTimeFraction_SouthFacingWindow_bool

I am using collaborative filtering to predict the last parameter—whether the blind should be completely open or completely closed.

This accounts for the recommender aspect of the project but not the energy optimization component. I am considering two approaches to ingrate optimization:

  1. Manually iterating between training my collaborative filtering model and optimizing the data.
  2. Weighting the error function used in training the collaborative filtering model by the parameter to be optimized (so that as the model learns to make progressively more accurate predictions, it also learns to make more optimal predictions).

I’m not sure whether the latter would work and would like to hear your thoughts on it.

@jeremy, any suggestions about how to approach this type of problem or similar examples I can reference in the textbook?

I appreciate the help.