Extensions for a Python package for GPU-accelerated estimation of mixed logit models.
Project description
Examples | Docs | Installation | API Reference | Contributing | Contact
Quick start
The following example uses the base searchlogit to estimate a mixed logit model for choices of electricity supplier (See the data here). The parameters are:
X: 2-D array of input data (in long format) with choice situations as rows, and variables as columns
y: 1-D array of choices (in long format)
varnames: List of variable names that matches the number and order of the columns in X
alts: 1-D array of alternative indexes or an alternatives list
ids: 1-D array of the ids of the choice situations
panels: 1-D array of ids for panel formation
randvars: dictionary of variables and their mixing distributions ("n" normal, "ln" lognormal, "t" triangular, "u" uniform, "tn" truncated normal)
The current version of searchlogit only supports input data in long format.
# Read data from CSV file
import pandas as pd
df = pd.read_csv("examples/data/electricity_long.csv")
varnames = ["pf", "cl", "loc", "wk", "tod", "seas"]
X = df[varnames]
y = df['choice']
# Fit the model with xlogit
from searchlogit import MixedLogit
model = MixedLogit()
model.fit(X, y,
varnames,
alts=df['alt'],
ids=df['chid'],
panels=df['id'],
randvars={'pf': 'n','cl':'n','loc':'n','wk':'n','tod':'n','seas':'n'},
n_draws=600)
model.summary()
Estimation with GPU processing enabled. Optimization terminated successfully. Estimation time= 5.2 seconds --------------------------------------------------------------------------- Coefficient Estimate Std.Err. z-val P>|z| --------------------------------------------------------------------------- pf -0.9996286 0.0331488 -30.1557541 9.98e-100 *** cl -0.2355334 0.0220401 -10.6865870 1.97e-22 *** loc 2.2307891 0.1164263 19.1605300 5.64e-56 *** wk 1.6251657 0.0918755 17.6887855 6.85e-50 *** tod -9.6067367 0.3112721 -30.8628296 2.36e-102 *** seas -9.7892800 0.2913063 -33.6047603 2.81e-112 *** sd.pf 0.2357813 0.0181892 12.9627201 7.25e-31 *** sd.cl 0.4025377 0.0220183 18.2819903 2.43e-52 *** sd.loc 1.9262893 0.1187850 16.2166103 7.67e-44 *** sd.wk -1.2192931 0.0944581 -12.9083017 1.17e-30 *** sd.tod 2.3354462 0.1741859 13.4077786 1.37e-32 *** sd.seas -1.4200913 0.2095869 -6.7756668 3.1e-10 *** --------------------------------------------------------------------------- Significance: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 Log-Likelihood= -3888.413 AIC= 7800.827 BIC= 7847.493
For more examples of searchlogit see this Jupyter Notebook in Google Colab. Google Colab provides GPU resources for free, which will significantly speed up your model estimation using xlogit.
Quick install
Install searchlogiyt using pip as follows:
pip install searchlogit
No GPU? No problem
searchlogit can also be used without a GPU. However, if you need to speed up your model estimation, there are several low cost and even free options to access cloud GPU resources. For instance:
Google Colab offers free GPU resources for learning purposes with no setup required, as the service can be accessed using a web browser. Using xlogit in Google Colab is very easy as it runs out of the box without needing to install CUDA or CuPy, which are installed by default. For examples of xlogit running in Google Colab see this link.
The Google Cloud platform offers GPU processing starting at $0.45 USD per hour for a NVIDIA Tesla K80 GPU with 4,992 CUDA cores.
Amazon Sagemaker offers virtual machine instances with the same TESLA K80 GPU at less than $1 USD per hour.
Benchmark
As shown in the plots below, xlogit is significantly faster than existing estimation packages. Also, xlogit provides convenient scaling when the number of random draws increases. These results were obtained using a modest and low-cost NVIDIA GTX 1060 graphics card. More sophisticated graphics cards are expected to provide even faster estimation times. For additional details about this benchmark and for replication instructions check https://xlogit.readthedocs.io/en/latest/benchmark.html.
Notes
The current version allows estimation of:
Mixed Logit with several types of mixing distributions (normal, lognormal, triangular, uniform, and truncated normal)
Mixed Logit with panel data
Mixed Logit with unbalanced panel data
Mixed Logit with Halton draws
Multinomial Logit models
Conditional logit models
Weighed regression for all of the logit-based models
Contact
If you have any questions, ideas to improve searchlogit, or want to report a bug, just open a new issue in xlogit’s GitHub repository .
Citing searchlogit
Please cite searchlogit as follows:
Beeramoole, P. B., Alexander, P., Kelly, R., Arteaga, C.,. (2022). Searchlogit [Computer software]. https://pypi.org/project/searchlogit/
Or using BibTex as follows:
@misc{searchlogit, author = {Arteaga, Cristian and Park, JeeWoong and Bhat, Prithvi and Paz, Alexander}, author = {Beeramoole, P and Paz, A and Kelly, R and Arteaga, title = {Searchlogit}, url = {https://pypi.org/project/searchlogit/}, year = {2022} }
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for searchlogit-0.0.31-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e64950908eb3d72ff5fd64181183410a52075ddc85e7ba5a1a7c10474e7d508d |
|
MD5 | 532c3493ae1d1d181685a53e65b770f5 |
|
BLAKE2b-256 | 4c8236b6df397d88582a7279b042407da1e4383ab228c39cca289057cb037a22 |