Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Fitting Custom Models with SciPy
📖 Scenario: You work as a data analyst for a small company that collects data on how the temperature affects the sales of ice cream. You want to find a simple mathematical model that fits the sales data so you can predict future sales based on temperature.
🎯 Goal: Build a custom mathematical model and fit it to the given temperature and sales data using SciPy's curve fitting tools. Then, display the fitted model's predicted sales for the given temperatures.
📋 What You'll Learn
Create a dataset of temperatures and corresponding ice cream sales.
Define a custom model function that relates temperature to sales.
Use SciPy's curve_fit function to find the best parameters for the model.
Print the predicted sales using the fitted model.
💡 Why This Matters
🌍 Real World
Fitting custom models helps businesses understand relationships in their data, like how temperature affects sales, so they can make better decisions.
💼 Career
Data scientists and analysts often fit models to data to predict outcomes and find trends, which is essential in many industries.
Progress0 / 4 steps
1
Create the temperature and sales data
Create two lists called temperatures and sales with these exact values: temperatures = [15, 18, 21, 24, 27, 30] and sales = [100, 150, 200, 250, 300, 350].
SciPy
Hint
Use square brackets to create lists and separate values with commas.
2
Define a custom linear model function
Define a function called linear_model that takes three parameters: x, a, and b. The function should return the value of a * x + b.
SciPy
Hint
Define a function using def and return the expression a * x + b.
3
Fit the linear model to the data
Import curve_fit from scipy.optimize. Use curve_fit with the linear_model function, temperatures, and sales to find the best parameters. Store the parameters in a variable called params.
SciPy
Hint
Use from scipy.optimize import curve_fit and call curve_fit(linear_model, temperatures, sales).
4
Print the predicted sales using the fitted model
Use the fitted parameters in params to calculate predicted sales for each temperature in temperatures by calling linear_model. Store the results in a list called predicted_sales. Then print predicted_sales.
SciPy
Hint
Use a list comprehension to apply linear_model to each temperature with the fitted parameters, then print the list.
Practice
(1/5)
1. What is the main purpose of using scipy.optimize.curve_fit in fitting custom models?
easy
A. To find the best parameters that make the model fit the data
B. To plot the data points automatically
C. To generate random data for testing
D. To calculate the mean of the dataset
Solution
Step 1: Understand the role of curve_fit
curve_fit is used to adjust parameters of a model function so that it best fits the given data points.
Step 2: Identify the correct purpose
It does not plot data, generate random data, or calculate means. Its main job is parameter estimation for fitting.
Final Answer:
To find the best parameters that make the model fit the data -> Option A
Quick Check:
curve_fit finds best parameters [OK]
Hint: Remember: curve_fit adjusts parameters to fit data [OK]
Common Mistakes:
Thinking curve_fit plots data automatically
Confusing curve_fit with data generation functions
Assuming curve_fit calculates statistics like mean
2. Which of the following is the correct way to define a custom model function for curve_fit that fits a line y = m*x + c?
easy
A. def model(m, c, x): return m + c * x
B. def model(x, m, c): return m * x + c
C. def model(x): return m * x + c
D. def model(x, m, c): return m + c / x
Solution
Step 1: Check parameter order for curve_fit
The model function must have the independent variable as the first argument, followed by parameters to fit.
Step 2: Verify function matches y = m*x + c
def model(x, m, c): return m * x + c correctly defines model(x, m, c) returning m * x + c. Others have wrong order or formula.
Final Answer:
def model(x, m, c): return m * x + c -> Option B
Quick Check:
Model args: x first, then parameters [OK]
Hint: Model function: x first, then parameters [OK]
Common Mistakes:
Swapping parameter and variable order
Missing parameters in function definition
Using wrong formula inside the function
3. Given the code below, what will be the output of print(popt)?
import numpy as np
from scipy.optimize import curve_fit
def model(x, a, b):
return a * np.exp(b * x)
xdata = np.array([0, 1, 2, 3])
ydata = np.array([1, 2.7, 7.4, 20.1])
popt, _ = curve_fit(model, xdata, ydata)
print(np.round(popt, 2))
medium
A. [1.0 0.99]
B. [1.0 1.0]
C. [1.0 1.0] but with a runtime error
D. [1.01 1.0]
Solution
Step 1: Understand the model and data
The model is a * exp(b * x). Given ydata roughly follows exponential growth, parameters a and b will be close to 1.
Step 2: Check output of curve_fit
Running the code fits parameters close to a=1.0 and b=0.99 (data approximates e^x but slightly less). Rounded to two decimals, popt is approximately [1.0 0.99].
Final Answer:
[1.0 0.99] -> Option A
Quick Check:
Exponential fit params ~ [1.0, 0.99] [OK]
Hint: Run curve_fit and round parameters to check values [OK]
Common Mistakes:
Misestimating parameters as [1.0 1.0] due to data approximation
Confusing parameter order
Expecting runtime errors without cause
4. What is wrong with the following code snippet for fitting a quadratic model using curve_fit?
import numpy as np
from scipy.optimize import curve_fit
def quad(x, a, b, c):
return a * x**2 + b * x + c
xdata = np.array([1, 2, 3, 4])
ydata = np.array([3, 7, 13, 21])
popt, pcov = curve_fit(quad, ydata, xdata)
print(popt)
medium
A. Missing initial guess for parameters
B. The model function has wrong formula for quadratic
C. The independent and dependent variables are swapped in curve_fit call
D. The print statement is incorrect
Solution
Step 1: Check curve_fit arguments
curve_fit expects the model, xdata (independent), then ydata (dependent). Here, ydata and xdata are swapped.
Step 2: Identify the error impact
Swapping causes wrong fitting or runtime errors because the model expects x values first.
Final Answer:
The independent and dependent variables are swapped in curve_fit call -> Option C