Library / SDK
X-DataInitiative/tick avatar
X-DataInitiative/tick

tick: point process and Hawkes modelling in Python

Module for statistical learning, with a particular emphasis on time-dependent modelling

556 stars120 forksPythonBSD-3-Clause

At a glance

What is it?
tick is a Python 3 library for statistical learning on time-dependent systems, built around a shared optimization core. It is strongest for Hawkes process simulation and inference, and the README is explicit that Windows support is experimental.
Who is it for?
tick fits researchers and engineers who need Hawkes process inference, point process simulation, or a proximal-solver toolbox they can extend, and who work on Linux or macOS with Python 3.11 or newer. It is a poor fit if you need a stable API surface, because pyproject.toml still declares Development Status 3 - Alpha, and if your pipeline is scikit-learn estimators end to end, since tick ships its own model classes and solvers rather than wrapping sklearn's.
Can I use it commercially?
Yes. BSD-3-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 107 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What tick solves, and who it is built for

Most Python machine learning libraries assume rows are independent. Event data is not like that. A trade arriving on an order book changes the rate at which the next trade arrives, and a mention on social media changes the rate of the next mention. tick exists for that class of problem. The README describes it as a Python 3 module for statistical learning with a particular emphasis on time-dependent modelling, and the topics list names point-process explicitly alongside machine-learning, optimization and statistics.

The audience is narrow on purpose. The README's use cases are pharmacovigilance signal detection with the French national social security database, high-frequency order book modelling in finance, and information propagation on Twitter during the 2017 French presidential campaign. Those are all settings where the arrival times themselves carry the signal. If you are doing tabular regression on independent samples, tick has generalized linear models that will work, but scikit-learn covers that ground with far more material around it. The project was started in 2016 at the DataScience initiative of École Polytechnique by Emmanuel Bacry, Martin Bompaire, Stéphane Gaïffas and Søren Vinther Poulsen, and there is an associated paper at arXiv:1707.03003 that the README asks you to cite in scientific publications.

The optimization core underneath the Hawkes models

The architecture is layered, and the README states the layering directly: the core of the library is an optimization module providing model computational classes, solvers and proximal operators for regularization. Everything else sits on top of that. Generalized linear models and the Hawkes inference routines are consumers of the same solver interface, which is why the examples directory contains a file named plot_prox_example.py next to the modelling examples.

That design has a practical consequence. If you need a proximal operator or a solver that the library does not ship, you are working against a documented internal interface rather than a public modelling API. The repository layout reflects the split: there is a python/ directory for the Python layer, a lib/ directory, a CMakeLists.txt, and a tick/ package directory. The C++ side is real. pyproject.toml uses scikit-build-core with pybind11 as the build backend, and the README warns that installation may take a few minutes to build and link C++ extensions.

For Hawkes work specifically, the README lists the supported assumptions: exponential kernels, sums of exponential kernels, linear combinations of basis kernels, and sparse interactions. Simulation covers standard and what the README calls exotic kernels. The examples directory carries the concrete cases, with plot_hawkes_em.py, plot_hawkes_basis_kernels.py, plot_hawkes_gaussian_kernels.py, plot_hawkes_varying_baseline.py and plot_hawkes_finance_data.py among the files.

Installing tick and running a first Hawkes example

The README gives one installation path for users: pip. The project also documents a source installation in INSTALL.md, which is where you go if you need to build the C++ extensions yourself.

bash
pip install tick

The README notes that this may take a few minutes because it builds and links C++ extensions. Then verify the import, which the README presents as the check that installation worked:

bash
python3 -c "import tick;"

If that command returns without error, the package is importable. The README mentions that you can add tick to PYTHONPATH if necessary, but does not explain when that becomes necessary.

The fastest way to see the library doing something is the examples directory, which the README points to as a comprehensive list at the documentation site. The Hawkes examples are standalone scripts, so the workflow is to run one and read it. The README does not document a command for executing an example script, so open the file and run it in your own interpreter rather than copying a command from the documentation. Expect a matplotlib figure, since matplotlib is a declared dependency and the examples are named with the plot_ prefix used by the documentation build. If you want the model classes themselves rather than a script, the documentation at x-datainitiative.github.io/tick is where the API reference lives, and the README states it can be built locally with make html from within the doc directory, which requires Sphinx.

Where tick gets in your way

The packaging metadata is the first warning. pyproject.toml declares Development Status 3 - Alpha. That is the project's own classifier, not an outside assessment, and it sits oddly next to a version string of 0.8.0.2 and a project that has been publishing since 2016. Treat the API as something that can move between releases.

The platform story is uneven. The README says tick currently works on Linux/OSX and that Windows is experimental. The repository still carries .travis.yml.off, a disabled Travis configuration, and the README's build status table points at Travis and AppVeyor badges that no longer reflect an active CI setup. If your team develops on Windows laptops and deploys to Linux, the README is telling you the development half of that is the unsupported half.

The dependency floor is high and it is not negotiable through extras. pyproject.toml requires Python 3.11 or newer, plus numpy>=2.0, scipy>=1.13, pandas>=2.2, scikit-learn>=1.5 and matplotlib>=3.8 as hard dependencies. Installing tick into a legacy environment pinned to numpy 1.x will fail at resolution, and there is no configuration flag to opt out of the matplotlib dependency even if you only want the solvers.

Finally, the README does not document rollback, deprecation policy, or a version compatibility matrix between releases. The release history shows three closely spaced releases (0.8.0.0 on 2026-04-18, 0.8.0.1 on 2026-04-20, 0.8.0.2 on 2026-05-04), which reads as patch churn rather than a stable line. Pin the exact version in production.

tick against PyHawkes and Hawkeslib

The obvious alternatives for Hawkes modelling in Python are PyHawkes and Hawkeslib, both of which people search for alongside tick. The difference is scope, not just implementation.

Hawkeslib is a focused Hawkes library. It does Hawkes estimation and little else. If Hawkes is the only thing you need, that focus is an advantage: fewer dependencies to reconcile, less surface to learn. tick is a different shape of project. Its Hawkes routines are one consumer of a general optimization core that also carries generalized linear models, proximal operators and solvers. The README frames the library as three things at once: statistical learning for time-dependent systems, tools for generalized linear models, and a generic optimization toolbox. That is more to install and more to understand, and it buys you the ability to swap kernels, add a regularizer, or reach for Poisson and logistic regression in the same environment.

PyHawkes sits closer to the Bayesian side of the problem, which changes what you get out of a fit. tick's documented Hawkes assumptions are frequentist and kernel-parametric: exponential kernels, sums of exponentials, basis kernel combinations, sparse interactions. If your modelling question is about posterior uncertainty over network structure rather than a point estimate of interaction kernels, the two libraries are answering different questions, and tick's README does not claim to answer the Bayesian one.

A fair summary: choose tick when you want the optimization toolbox and the GLMs alongside the point process models, or when you need to move between kernel parameterizations. Choose a narrower Hawkes library when Hawkes is the whole job and you would rather not carry numpy 2, scipy 1.13, pandas 2.2 and matplotlib 3.8 as a floor.

Maintenance, licence and the cost of upgrading

The repository is not archived, and the last push was on 2026-06-15. The most recent release listed is v0.8.0.2 from 2026-05-04. That is the extent of what the packaging and repository metadata supports; the README does not describe a release cadence or a support window, so there is no documented promise about how long a given version will receive fixes.

Upgrading has a specific cost profile. Because the C++ extensions are compiled at install time through scikit-build-core and pybind11, a version bump is not a pure Python wheel swap for everyone. The README's own warning that installation may take a few minutes to build and link C++ extensions applies to every reinstall, including in CI. Budget for that, and cache the built wheel in your pipeline rather than rebuilding on each job.

The dependency floors move together. A future release that raises the numpy or scipy minimum forces an environment-wide upgrade, since those packages sit under most of the scientific stack. The three patch releases in April and May 2026 suggest the maintainers do ship fixes quickly, but the README does not say whether patch releases are source-compatible.

On licensing: tick is distributed under the 3-Clause BSD license, stated in the README and in pyproject.toml as BSD-3-Clause, with the full text in LICENSE.txt. BSD-3-Clause is permissive and permits commercial use and redistribution with the licence text retained, but it also means there is no patent grant clause. Whether that matters for your organization is a question for your own counsel, not something this article can settle. The README asks for a citation in scientific publications and provides a bibtex entry for that purpose; that is a request, not a licence condition.

Editorial conclusion

tick fits researchers and engineers who need Hawkes process inference, point process simulation, or a proximal-solver toolbox they can extend, and who work on Linux or macOS with Python 3.11 or newer. It is a poor fit if you need a stable API surface, because pyproject.toml still declares Development Status 3 - Alpha, and if your pipeline is scikit-learn estimators end to end, since tick ships its own model classes and solvers rather than wrapping sklearn's. Before committing, run pip install tick in the exact environment you plan to deploy, confirm python3 -c "import tick;" succeeds, and check that the Hawkes model variant you need (exponential kernel, sum of exponentials, basis kernels, sparse interactions) appears in the examples list.

Frequently asked questions

How do I use tick in Python?

Install it with pip install tick, then confirm the import works with python3 -c "import tick;". From there the README points to the examples directory and the documentation site for working code, including standalone scripts for Hawkes simulation and inference and for linear, logistic and Poisson regression.

Which operating systems and Python versions does tick support?

The README states that tick works on Linux and OSX, with Windows described as experimental, and that it requires Python 3.5 or newer. pyproject.toml sets a stricter floor of Python 3.11 and lists support for 3.11 through 3.14.

What kinds of Hawkes models can tick infer?

The README lists inference under several assumptions on the kernels: exponential kernels, sums of exponential kernels, linear combinations of basis kernels, and sparse interactions. Simulation covers standard and exotic kernels, and the examples directory includes files for basis kernels, Gaussian kernels and varying baselines.

Does installing tick require compiling C++?

Yes. The README says installation may take a few minutes to build and link C++ extensions, and pyproject.toml configures the build with scikit-build-core and pybind11. A source installation path is documented separately in INSTALL.md.

What licence is tick released under?

tick is distributed under the 3-Clause BSD license, stated in the README and recorded as BSD-3-Clause in pyproject.toml, with the full text in LICENSE.txt. The README also provides a bibtex entry and asks for a citation if you use the library in a scientific publication.

Official sources

  1. License: BSD-3-Clause
  2. Project website
  3. README
  4. Releases
  5. X-DataInitiative/tick on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/x-datainitiative-tick.svg)](https://hysenlabs.com/projects/x-datainitiative-tick)