Recommender Systems: Behind the Screen

Brought by: edX

Overview

In this course, you will explore and learn the best methods and practices in recommender systems, which are an essential component of the online ecosystem. This course was developed by IVADO and HEC Montréal as part of a workshop that took place in Montreal. You will be accompanied throughout and given concrete examples by seven international experts from both Academia and Industry.

Recommender systems are algorithms that find patterns in user behaviour to improve personalized experiences and understand their environment. They are ubiquitous and are most often used to recommend items to users, for example, books, movies, but also possible friends, food recipes or even relevant documentation in large software projects, or papers of interest to scientists.

The content of this MOOC is an introduction to the field of recommender systems. The outline includes: machine learning for recommender systems followed by an introduction to evaluation methods; advanced modelling; contextual bandits; ranking methods; and fairness and discrimination in recommender systems.

The course is primarily intended for industry professionals and academics with basic (first-year undergraduate) knowledge in mathematics and programming (ideally Python). Graduate students in science and engineering (mainly those who are not yet familiar with machine learning and recommender systems) may find this content instructive and compelling. The content of this course will also be of great use to whomever uses or is interested in AI, in any other way.

We estimate that it takes 6 weeks to follow this class. The course is divided into relevant segments that you may watch at your own pace. There are comprehensive quizzes at the end of each segment to evaluate your understanding of the content. You will also practice recommender systems algorithms thanks to a tutorial guided by an expert. Also, a second self-practice module will be offered to participants who will register for the course with the Verified Certificate.

We welcome you to this special learning journey of Recommender Systems: Behind the Screen!

This course is brought to you by IVADO, HEC Montréal and Université de Montréal.

IVADO is a Québec-wide collaborative institute in the field of digital intelligence.

HEC Montréal is a French-language university offering internationally renowned management education and research.

Université de Montréal is one of the world’s leading research universities.

Syllabus

MODULE 1 Machine Learning for Recommender Systems

  • Score Models
  • Practical Aspects

MODULE TUTORIAL Matrix Factorization

MODULE 2 Evaluations for Recommender Systems

  • Offline (Batch) Evaluation
  • Online (Production) Evaluation

MODULE 3 Advanced modelling

  • Extending Basic Models
  • A missing Data Perspective

MODULE SELF-PRACTICE Autoencoders (this module is assessed and offered only to participants who register for the course with the Verified Certificate)

MODULE 4 Contextual Bandits

  • Introduction to Bandits
  • Putting it All Together

MODULE 5 Learning to Rank

  • Learning to Rank with Neural Networks
  • Learning to Rank with Deep Neural Networks

MODULE 6 Fairness and Discrimination in Recommender Systems

  • Algorithmic Fairness
  • Fairness in Information Retrieval

Taught by

Laurent CHARLIN, Fernando DIAZ, Michael Ekstrand, Dora JAMBOR, Dawen LIANG, James McINERNEY and Bhaskar MITRA

Recommender Systems: Behind the Screen
Go to course

Recommender Systems: Behind the Screen

Brought by: edX

  • edX
  • Free
  • English
  • Certificate Available
  • Certain days
  • beginner
  • English
8.1.2PHP Version833msRequest Duration2MBMemory UsageGET en/courses/{slug}Route
    • Booting (542ms)
    • Application (289ms)
    • 1 x Booting (65.02%)
      541.93ms
      1 x Application (34.73%)
      289.41ms
      14 templates were rendered
      • public.courses.show (resources/views/public/courses/show.blade.php)3bladefile
        Params
        0
        course
        1
        links
        2
        config
      • public.courses.partials.breadcrumbs (resources/views/public/courses/partials/breadcrumbs.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.heading (resources/views/public/courses/partials/heading.blade.php)7bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        classes
      • public.courses.partials.details (resources/views/public/courses/partials/details.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.breadcrumbs (resources/views/public/courses/partials/breadcrumbs.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.heading (resources/views/public/courses/partials/heading.blade.php)7bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        classes
      • public.layouts.main (resources/views/public/layouts/main.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.layouts.partials.meta (resources/views/public/layouts/partials/meta.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.layouts.partials.navbar (resources/views/public/layouts/partials/navbar.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.auth.profile.partials.links (resources/views/public/auth/profile/partials/links.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.layouts.partials.flash-session (resources/views/public/layouts/partials/flash-session.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      uri
      GET en/courses/{slug}
      middleware
      web, localize:en
      controller
      App\Http\Controllers\CourseController@show
      as
      en.courses.show
      namespace
      prefix
      /en
      where
      file
      app/Http/Controllers/CourseController.php:17-35
      6 statements were executed7.47ms
      • select * from `courses` where `slug_en` = 'recommender-systems:-behind-the-screen' limit 1
        6.07ms/app/Http/Controllers/CourseController.php:20corspedia
        Metadata
        Bindings
        • 0. recommender-systems:-behind-the-screen
        Backtrace
        • 17. /app/Http/Controllers/CourseController.php:20
        • 18. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 19. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 20. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • update `courses` set `visitors` = `visitors` + 1, `courses`.`updated_at` = '2025-07-27 19:30:54' where `id` = 886
        460μs/app/Http/Controllers/CourseController.php:21corspedia
        Metadata
        Bindings
        • 0. 2025-07-27 19:30:54
        • 1. 886
        Backtrace
        • 17. /app/Http/Controllers/CourseController.php:21
        • 18. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 19. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 20. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select `id`, `name_en`, `name_ar`, `topic_id`, `slug_en`, `slug_ar` from `subjects` where `subjects`.`id` in (58)
        210μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 20. /app/Http/Controllers/CourseController.php:23
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 22. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 23. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 24. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select `id`, `name_en`, `name_ar`, `slug_en`, `slug_ar` from `topics` where `topics`.`id` in (1)
        180μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 25. /app/Http/Controllers/CourseController.php:23
        • 26. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 27. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 28. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 29. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select * from `providers` where `providers`.`id` in (1) and `providers`.`deleted_at` is null
        220μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 20. /app/Http/Controllers/CourseController.php:23
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 22. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 23. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 24. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select * from `html_files` where `html_files`.`id` = 880 limit 1
        330μs/app/Models/Course.php:84corspedia
        Metadata
        Bindings
        • 0. 880
        Backtrace
        • 21. /app/Models/Course.php:84
        • 28. view::public.courses.show:29
        • 30. /vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:125
        • 31. /vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php:58
        • 32. /vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php:72
      App\Models\HtmlFile
      1
      App\Models\Provider
      1
      App\Models\Topic
      1
      App\Models\Subject
      1
      App\Models\Course
      1
        _token
        1SELitnZ2vhIHwuQ3KUrgOMICblpBK5OM08HwyeJ
        locale
        en
        _previous
        array:1 [ "url" => "https://www.corspedia.com/en/courses/recommender-systems:-behind-the-screen" ]
        _flash
        array:2 [ "old" => [] "new" => [] ]
        PHPDEBUGBAR_STACK_DATA
        []
        path_info
        /en/courses/recommender-systems:-behind-the-screen
        status_code
        200
        
        status_text
        OK
        format
        html
        content_type
        text/html; charset=UTF-8
        request_query
        []
        
        request_request
        []
        
        request_headers
        0 of 0
        array:24 [ "cf-ipcountry" => array:1 [ 0 => "US" ] "cf-connecting-ip" => array:1 [ 0 => "216.73.216.94" ] "cdn-loop" => array:1 [ 0 => "cloudflare; loops=1" ] "x-forwarded-proto" => array:1 [ 0 => "https" ] "x-forwarded-for" => array:1 [ 0 => "216.73.216.94" ] "sec-fetch-site" => array:1 [ 0 => "none" ] "accept" => array:1 [ 0 => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" ] "user-agent" => array:1 [ 0 => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" ] "upgrade-insecure-requests" => array:1 [ 0 => "1" ] "sec-ch-ua-platform" => array:1 [ 0 => ""Windows"" ] "sec-ch-ua-mobile" => array:1 [ 0 => "?0" ] "sec-ch-ua" => array:1 [ 0 => ""Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"" ] "cache-control" => array:1 [ 0 => "no-cache" ] "pragma" => array:1 [ 0 => "no-cache" ] "sec-fetch-dest" => array:1 [ 0 => "document" ] "cf-ray" => array:1 [ 0 => "965e8dcebe17ac69-YYZ" ] "accept-encoding" => array:1 [ 0 => "gzip, br" ] "priority" => array:1 [ 0 => "u=0, i" ] "sec-fetch-user" => array:1 [ 0 => "?1" ] "sec-fetch-mode" => array:1 [ 0 => "navigate" ] "cf-visitor" => array:1 [ 0 => "{"scheme":"https"}" ] "host" => array:1 [ 0 => "www.corspedia.com" ] "content-length" => array:1 [ 0 => "" ] "content-type" => array:1 [ 0 => "" ] ]
        request_server
        0 of 0
        array:50 [ "USER" => "www-data" "HOME" => "/var/www" "HTTP_CF_IPCOUNTRY" => "US" "HTTP_CF_CONNECTING_IP" => "216.73.216.94" "HTTP_CDN_LOOP" => "cloudflare; loops=1" "HTTP_X_FORWARDED_PROTO" => "https" "HTTP_X_FORWARDED_FOR" => "216.73.216.94" "HTTP_SEC_FETCH_SITE" => "none" "HTTP_ACCEPT" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" "HTTP_USER_AGENT" => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" "HTTP_UPGRADE_INSECURE_REQUESTS" => "1" "HTTP_SEC_CH_UA_PLATFORM" => ""Windows"" "HTTP_SEC_CH_UA_MOBILE" => "?0" "HTTP_SEC_CH_UA" => ""Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"" "HTTP_CACHE_CONTROL" => "no-cache" "HTTP_PRAGMA" => "no-cache" "HTTP_SEC_FETCH_DEST" => "document" "HTTP_CF_RAY" => "965e8dcebe17ac69-YYZ" "HTTP_ACCEPT_ENCODING" => "gzip, br" "HTTP_PRIORITY" => "u=0, i" "HTTP_SEC_FETCH_USER" => "?1" "HTTP_SEC_FETCH_MODE" => "navigate" "HTTP_CF_VISITOR" => "{"scheme":"https"}" "HTTP_HOST" => "www.corspedia.com" "REDIRECT_STATUS" => "200" "SERVER_NAME" => "corspedia.com" "SERVER_PORT" => "443" "SERVER_ADDR" => "141.95.147.152" "REMOTE_USER" => "" "REMOTE_PORT" => "47072" "REMOTE_ADDR" => "172.69.130.251" "SERVER_SOFTWARE" => "nginx/1.18.0" "GATEWAY_INTERFACE" => "CGI/1.1" "HTTPS" => "on" "REQUEST_SCHEME" => "https" "SERVER_PROTOCOL" => "HTTP/2.0" "DOCUMENT_ROOT" => "/var/www/corspedia/public" "DOCUMENT_URI" => "/index.php" "REQUEST_URI" => "/en/courses/recommender-systems:-behind-the-screen" "SCRIPT_NAME" => "/index.php" "CONTENT_LENGTH" => "" "CONTENT_TYPE" => "" "REQUEST_METHOD" => "GET" "QUERY_STRING" => "" "SCRIPT_FILENAME" => "/var/www/corspedia/public/index.php" "PATH_INFO" => "" "FCGI_ROLE" => "RESPONDER" "PHP_SELF" => "/index.php" "REQUEST_TIME_FLOAT" => 1753644654.1271 "REQUEST_TIME" => 1753644654 ]
        request_cookies
        []
        
        response_headers
        0 of 0
        array:5 [ "content-type" => array:1 [ 0 => "text/html; charset=UTF-8" ] "cache-control" => array:1 [ 0 => "no-cache, private" ] "date" => array:1 [ 0 => "Sun, 27 Jul 2025 19:30:54 GMT" ] "set-cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6IlhFTmRnb0tjU3c5M0FIdWJHU2xxTEE9PSIsInZhbHVlIjoiKytOYjdQQVlJK01Ha0w5WTdPbFBHWWRXajhlcEhPWFJPZmpHaEplMndTQlhWcFFMK1lQVmxORUd2V1pkSjI4ZE1FaTl6Kzhsa0V6OExnZjg2OXJLRkZUNEhFb0dCSWRBMjJSVFhjZTVPeGxvb3lzZ1JlMGtEVlhjY2cwRnp6dEEiLCJtYWMiOiJkNWZmNDAzZTg2NDQ5ZTM4Y2I2YjA5YjA0ZDg2YTYyNzIwODAyZDYyYTg1YzQxY2Y2MzQ5NWY5ZTM1ZjBkODg0IiwidGFnIjoiIn0%3D; expires=Sun, 27 Jul 2025 21:30:54 GMT; Max-Age=7200; path=/; samesite=laxXSRF-TOKEN=eyJpdiI6IlhFTmRnb0tjU3c5M0FIdWJHU2xxTEE9PSIsInZhbHVlIjoiKytOYjdQQVlJK01Ha0w5WTdPbFBHWWRXajhlcEhPWFJPZmpHaEplMndTQlhWcFFMK1lQVmxORUd2V1pkSjI4ZE1FaTl6K" 1 => "laravel_session=eyJpdiI6IktPL3QwY2JmYVBDR0xLL3NVYnBDUWc9PSIsInZhbHVlIjoiRFRoL2FNQ1BzSy9KK0ZRZVdpSVhHUkRLY0Fjb3BoVHlUWHJuQXdLbzgrMmdTcU9DWk1PYnZEblBkWjEramQxaVBhTGxvSVdRQjc3MVJOaTcyUVZqYk5YQkZ3elExSndPNk1lNUpIU0x3OWtXaUxJbmI0WGd6ekMveGJDSTlEQkEiLCJtYWMiOiIxNGY0NzA0M2JhMGE3ZmQ2NWViMzE3YjE3MzJkZDBjMDY5N2ZiYmQwMWZhNGVhNTc3ODZjMTFiMmM2NzI5ODMwIiwidGFnIjoiIn0%3D; expires=Sun, 27 Jul 2025 21:30:54 GMT; Max-Age=7200; path=/; httponly; samesite=laxlaravel_session=eyJpdiI6IktPL3QwY2JmYVBDR0xLL3NVYnBDUWc9PSIsInZhbHVlIjoiRFRoL2FNQ1BzSy9KK0ZRZVdpSVhHUkRLY0Fjb3BoVHlUWHJuQXdLbzgrMmdTcU9DWk1PYnZEblBkWjEramQxaVBh" ] "Set-Cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6IlhFTmRnb0tjU3c5M0FIdWJHU2xxTEE9PSIsInZhbHVlIjoiKytOYjdQQVlJK01Ha0w5WTdPbFBHWWRXajhlcEhPWFJPZmpHaEplMndTQlhWcFFMK1lQVmxORUd2V1pkSjI4ZE1FaTl6Kzhsa0V6OExnZjg2OXJLRkZUNEhFb0dCSWRBMjJSVFhjZTVPeGxvb3lzZ1JlMGtEVlhjY2cwRnp6dEEiLCJtYWMiOiJkNWZmNDAzZTg2NDQ5ZTM4Y2I2YjA5YjA0ZDg2YTYyNzIwODAyZDYyYTg1YzQxY2Y2MzQ5NWY5ZTM1ZjBkODg0IiwidGFnIjoiIn0%3D; expires=Sun, 27-Jul-2025 21:30:54 GMT; path=/XSRF-TOKEN=eyJpdiI6IlhFTmRnb0tjU3c5M0FIdWJHU2xxTEE9PSIsInZhbHVlIjoiKytOYjdQQVlJK01Ha0w5WTdPbFBHWWRXajhlcEhPWFJPZmpHaEplMndTQlhWcFFMK1lQVmxORUd2V1pkSjI4ZE1FaTl6K" 1 => "laravel_session=eyJpdiI6IktPL3QwY2JmYVBDR0xLL3NVYnBDUWc9PSIsInZhbHVlIjoiRFRoL2FNQ1BzSy9KK0ZRZVdpSVhHUkRLY0Fjb3BoVHlUWHJuQXdLbzgrMmdTcU9DWk1PYnZEblBkWjEramQxaVBhTGxvSVdRQjc3MVJOaTcyUVZqYk5YQkZ3elExSndPNk1lNUpIU0x3OWtXaUxJbmI0WGd6ekMveGJDSTlEQkEiLCJtYWMiOiIxNGY0NzA0M2JhMGE3ZmQ2NWViMzE3YjE3MzJkZDBjMDY5N2ZiYmQwMWZhNGVhNTc3ODZjMTFiMmM2NzI5ODMwIiwidGFnIjoiIn0%3D; expires=Sun, 27-Jul-2025 21:30:54 GMT; path=/; httponlylaravel_session=eyJpdiI6IktPL3QwY2JmYVBDR0xLL3NVYnBDUWc9PSIsInZhbHVlIjoiRFRoL2FNQ1BzSy9KK0ZRZVdpSVhHUkRLY0Fjb3BoVHlUWHJuQXdLbzgrMmdTcU9DWk1PYnZEblBkWjEramQxaVBh" ] ]
        session_attributes
        0 of 0
        array:5 [ "_token" => "1SELitnZ2vhIHwuQ3KUrgOMICblpBK5OM08HwyeJ" "locale" => "en" "_previous" => array:1 [ "url" => "https://www.corspedia.com/en/courses/recommender-systems:-behind-the-screen" ] "_flash" => array:2 [ "old" => [] "new" => [] ] "PHPDEBUGBAR_STACK_DATA" => [] ]