Probit Regression
Fit a Probit Regression of whether dependent_ticker’s return is positive on independent_tickers.
As with get_logistic_regression, the dependent variable is turned into a binary outcome (1 when the return is positive, 0 otherwise). The probability of that outcome is modelled through the standard normal cumulative distribution function instead of the logistic function.
The formula is as follows:
\[\text{yₜ} = 1 \;\text{if the dependent ticker's}\; \text{column} (\text{Return by default}) \text{is above}\; 0,\;\; \text{else 0}\] \[P(\text{yₜ} = 1 | \text{xₜ}) = \Phi(\text{xₜ'beta}),\;\; \text{with xₜ the independent tickers' column plus a constant}\] \[\text{betâ} = \text{argmax}\; \text{Σ} \left[\text{yₜ} \cdot \ln(\text{pₜ}) + (1 - \text{yₜ}) \cdot \ln(1 - \text{pₜ})\right],\;\; \text{solved by Newton-Raphson (statsmodels Probit)}\] \[\text{Pseudo}\; R ^{2} = 1 - \text{ln}\; L (\text{betâ}) / \text{ln}\; \text{L₀} (\text{McFadden}),\;\; \text{with L₀ the likelihood of a constant-only model}\]Where Phi is the standard normal CDF. The model is fitted by Maximum Likelihood. A positive coefficient means a higher probability of a positive return, but the size of a coefficient is not a log-odds ratio as in the Logit model. In practice Probit and Logit give very similar fitted probabilities; Probit is the convention in parts of the econometrics literature and underlies two-step estimators such as the Heckman selection correction.
For more information about the method, see the following paper:
- Bliss, C.I. (1934). “The Method of Probits.” Science, 79(2037), 38-39.
Also known as: probit model.
Probit Regression in Python or via the MCP
Install the Finance Toolkit with:
pip install financetoolkit -U
Then call get_probit_regression as shown below.
from financetoolkit import Toolkit
toolkit = Toolkit(
["TSLA", "QQQ"],
api_key="FINANCIAL_MODELING_PREP_KEY",
start_date="2025-01-01",
end_date="2025-12-31",
)
# TSLA (the first ticker) is dependent; QQQ is independent
toolkit.econometrics.get_probit_regression()
Or, after setting up the Finance Toolkit MCP, ask:
How well did the daily returns of the Invesco QQQ Trust predict whether Tesla rose on a day in 2025, according to a probit model?
Which returns:
| Coefficient | Std. Error | z-Statistic | P-Value | |
|---|---|---|---|---|
| Intercept | -0.0848 | 0.0913 | -0.9294 | 0.3527 |
| QQQ | 78.1324 | 11.1444 | 7.0109 | 0 |
Using Your Own Data
get_probit_regression runs on any data, not only prices: ratios, economic indicators, yield curves or your own dataset. Pass a DataFrame, a Series or a dictionary of them to Econometrics as data, with the dates in the rows or the columns, and set changes to how its changes are calculated: "percentage", "log", "difference" for rates and ratios, or None when the data are changes already. For example, for the monthly unemployment rates of the United States and Germany:
from financetoolkit import Economics, Econometrics
economics = Economics(start_date="2000-01-01")
unemployment = economics.get_unemployment_rate(
countries=["United States", "Germany"], period="monthly"
)
econometrics = Econometrics(data=unemployment, changes="difference")
econometrics.get_probit_regression()
Parameters
get_probit_regression accepts the following parameters.
| Parameter | Type | Description | Example |
|---|---|---|---|
dependent_ticker | str | None | The dependent asset (whose up/down direction is predicted). Defaults to None, meaning the Toolkit instance’s first ticker. | "AAPL" |
independent_tickers | str | list[str] | None | The independent (predictor) asset(s). Defaults to None, meaning every other ticker in the Toolkit instance besides dependent_ticker. | ["MSFT", "Benchmark"] |
include_benchmark | bool | Whether to include “Benchmark” in the default independent ticker(s) (has no effect when independent_tickers is given explicitly). Defaults to False. | True |
period | str | The data frequency (daily, weekly, monthly, quarterly, or yearly). Defaults to “daily”. | "weekly" |
column | str | The historical data column to derive returns from. Defaults to “Return”. | "Return" |
add_constant | bool | Whether to include an intercept. Defaults to True. | False |
rounding | int | None | The number of decimals to round the results to. Defaults to None. | 2 |