Topic outline

  • Welcome to the course!

    The course focuses on bridging the gap between predictive and prescriptive modelling. This will entail combining probabilistic modelling approaches with modern optimization techniques and decision-analytic tools. In terms of content, the course consists of two parts. In the first part, the students will learn methods and theory (e.g., optimization concepts and fundamentals of statistical learning theory) needed for prescriptive modelling. The material will involve programming assignments with practical applications. The second part will feature applications in the form of visiting lectures, who come different industries (e.g., financial analytics, sports analytics).

    After completing the course, students will

    • understand the importance of prescriptive analytics in business decision-making
    • be able to combine predictive modeling approaches with optimization techniques to build prescriptive analytics solutions, and
    • be able to implement (program) their solutions with suitable software.

    Assessment and grading

    Course assessment is comprised of the following two parts:

    • Team case (course project): 70%
    • Class activity (tutorials, lectures, exercises): 30%.

    All assignments must be completed to pass the course. Late assignments will not be accepted. Points from class activities and cases will be scaled to the weights above (i.e. full points from class activity -> 30 course grade precentage). Note that the starting level of the student teams will be taken into account in grading, and thus special attention is paid to the teams’ development in knowledge sharing and learning.

    Indicative course grade limits as percentages from full points:

    >= 85% -> 5
    >= 75% -> 4
    >= 65% -> 3
    >= 55% -> 2
    >= 35% -> 1

    These limits may be adjusted if deemed necessary by course staff. To give an example: getting half of class activity points (+15%  for the course) and 80% of case points (+56% for course) will result in a total of 71% for the course, implying a grade of 3.

    Please take a look at the course syllabus to find important information regarding course content, structure, assessment, etc.

    All study materials except the course books will be provided as needed and made available on the pages found in the sidebar.

  • Please find the syllabus and other useful material here. Note that changes to the preliminary schedule are possible.

  • Not available unless: Your User account contains (use: contains
  • The course requires coding assignments to be completed. 

    For working on the coding assignments, we will provide you a web-based Python environment ("JupyterHub"). This environment allows you to work with Python notebooks using only a web-browser (such as Firefox or Chrome) and your Aalto account (same username and password that you are using for logging into MyCourses).

    In general, the workflow for completing a coding assignment is as follows: 

    1. Once published, fetch the assignment into your home folder (on Jupyter Hub)
    2. Complete the exercises inside the notebook
    3. Download the completed notebook (file type .ipynb) to your computer
    4. Upload the file to the MyCourses submission box 

    What is JupyterHub?

    JupyterHub is a server which hosts Jupyter Notebooks. In this course, it is used to share tutorials and publish assignments. It currently has capacity for about 500 concurrent users.

    Okey what next?

    Go to the site

    JupyterHub is hosted at


    When the page has loaded, you should be greeted with a login page. Use your Aalto credentials to log in.

    Choose the correct module

    Next, a Spawner Options page will come up. Choose "Data Science for Business 2019 II" and press "Spawn". JupyterHub will launch a session for you. Depending on the load to the server, this might take even a couple of minutes (but usually just seconds).

    If you cannot see the course or receive an error message, please contact the course assistants!

    Home Page

    Once your session has started, you will see the screen below. If you have never worked with Aalto's JupyterHub, the "Files" tab will be empty. If you have used JupyterHub in other courses, you might see your old files which is totally ok. Next, click the "Assignments" tab to see your assignments. 

    Fetching the assignments

    In the Assignments tab, you see a list of assignments available to you. As the course goes on, more assignments will be available. 

    Check what assignments are available under the "Released assignments" header and click "Fetch". The assignment will now be shown under the "Downloaded assignments" header.

    Start working

    Go back to the "Files" tab. A new folder named "dsfb2019-2" will have appeared. Open it. 

    A folder named similarly to the fetched assignment will have appeared (if not, refresh the page in your browser). Within the folder you will find the assignment exercise notebook that you are required to complete. Further, the folder usually contains the relevant data files and in some cases images/banners. 

    Congrats, you are all set and ready to start working on the assignment. Good luck! 

    After you have completed the assignment, you can download it to your computer. Mark the file (1.) and then click "download" (2.). 

    Note: JupyterHub shows a submission function under the "Assignments" tab, however, we are NOT using it in this course (feature is still in beta stage). Submitting your assignment in JupyterHub is NOT a valid submission!

    Submitting your notebook

    Submit the download .ipynb file into the correct MyCourses submission box. This step is identical to what you are used from all other courses. 

  • Gurobi Installation guide

    For optimization, we’ll use the Gurobi Solver, one of the best solvers available. Gurobi is a commercial product but offers free academic licenses. It has a Python API that can be used from within Python code. The reference manual is here:

    Since many seem to have problems installing Gurobi, we made this step-by-step guide.

    Step 1: Make a Gurobi account

    Go to , make a new account and register (might not work with Safari browser). Wait for a confirmation email, confirm and set a password. Log-in with your email and newly set password. 

    Step 2: Get Gurobi license

    Gurobi is a licensed product, however it offers a free academic license. This setup is the reason why each student has to request a license individually. Aalto cannot do that in bulk on your behalf. Once you have an account and are logged-in, you need to request a license. On the front page, click on "get Gurobi". 

    Then click "Academic Licenses"

    Tick both boxes and click "Request License". The next page will show your license details. KEEP THIS PAGE OPEN!

    Step 3: Get the Gurobi Optimizer 

    Once you have an account and a license, you need to download the Gurobi Optimizer. This is a "real" program, not just a Python package. Click and open the "Get Gurobi" button (top right) in a new tab. DONT CLOSE THE LICENSE WINDOW. You will see the familiar Download Center, but this time click "Gurobi Optimzer".

    Accept the End User License Agreement on the next page. Download the latest version of Gurobi depending on your system (Windows, MacOS, Linux).

    Step 4: Install Gurobi Optimizer

    Before opening the downloaded file, ensure that you are connected to the Aalto network! This is how Gurobi verifies that you eligible for the academic license. Either you are physically on the Aalto premise and connected to the Aalto wifi, or you use the Aalto VPN to connect to the Aalto network remotely. 

    Open the downloaded file and run the installation. Once the installation is finished a terminal window will open. If not, you need to open the Gurobi optimizer manually, which should trigger the terminal window to open. Obviously, this will look different on Windows, MacOS and Linux, but it will look something like this:


    Since you followed these instructions, your Gurobi License window is still open (right?). Copy the license without the grbgetkey part (only the actual key). Paste it into the terminal. Either pasting will trigger the process or you need to press enter. The installer will verify your license. 

    Next, it will ask you to specify a directory for storing your key. I highly recommend to specify nothing and simply keep the default directory. Just hit enter. If you feel like hackerman/hackergirl, decide to  change the directory and stuff doesn't work later: no support from our end. 

    The installer will run and output at some point [Process completed]. Congrats, you are not done yet! 

    Step 5: Install the Gurobi Python package 

    So far, you have only installed the actual Gurobi optimisation software on your machine. In this course, however, we want to use Gurobi in Python. Therefore you need to install the Gurobi Python package. In this guide, I'll only discuss how to install the package with Anaconda. If you prefer another package manager you are probably able to install a package yourself. 

    Go to and read the instructions. If you don't have Anaconda yet (or Python, really?), set it up. The internet is full of guides for this step. Once you have Anaconda running, open a Terminal. 

    First add the Gurobi channel so that conda knows where to look for the package: 

    conda config --add channels

    Next, install the Gurobi package:

    conda install gurobi

    Step 6: Verify that things work

    A simple of checking that Gurobi works is to create a new Jupyter notebook (.ipynb file) and to import the Gurobi libraries. Just type

    Into a new cell and run it. If this works, Gurobi is properly installed. Congrats! Now you are done!