Skip to content

Commit

Permalink
documentation updates (#728)
Browse files Browse the repository at this point in the history
* emphasize application to RCTs
* add Running Tests to installation.rst
* prioritize installation, quickstart, examples

---------

Co-authored-by: Roland Stevenson <[email protected]>
  • Loading branch information
ras44 and rolandrmgservices authored Dec 15, 2023
1 parent 98edf37 commit 06a5f8f
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 8 deletions.
8 changes: 1 addition & 7 deletions docs/about.rst
Original file line number Diff line number Diff line change
Expand Up @@ -53,15 +53,9 @@ In essence, while traditional machine learning can tell us “what is”, causal
Measuring Causal Effects
------------------------

Different causal effects can be measured using varying techniques.

**Randomized Control Trials (RCT)** are the gold standard for causal effect measurements. Subjects are randomly exposed to a treatment and the Average Treatment Effect (ATE) is measured as the difference between the mean effects in the treatment and control groups. Random assignment removes the effect of any confounders on the treatment.

**Instrumental Variables (IV)** is a technique in which subjects are randomly exposed to a variable that influences treatment, but has no direct effect on the outcome.

An example of an instrumental variable is a streamlined sign-up page that allows an Uber user to sign up for Uber Eats. Not all subjects will sign up for Uber Eats, but the streamlined sign-up makes it easier for them to experience both Uber and Uber Eats. Thereafter, the subject’s outcome is unrelated to their signup experience. In other words, the streamlined signup influences the treatment, not the outcome.

If RCTs are not an option and hence confounders cannot be controlled for, the next best option is to attempt to **control for confounders** and measure the Conditional Average Treatment Effect (CATE). The CATE is an estimate of the treatment effect conditioned on all available covariates and confounders. Even if an RCT is available, if the treatment effects are heterogeneous across covariates, it might be preferable to measure the CATE. We call these Heterogeneous Treatment Effects (HTEs).
If an RCT is available and the treatment effects are heterogeneous across covariates, measuring the conditional average treatment effect(CATE) can be of interest. The CATE is an estimate of the treatment effect conditioned on all available experiment covariates and confounders. We call these Heterogeneous Treatment Effects (HTEs).


Example Use Cases
Expand Down
2 changes: 1 addition & 1 deletion docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ Contents:
:maxdepth: 2

about
methodology
installation
quickstart
examples
methodology
interpretation
validation
causalml
Expand Down
11 changes: 11 additions & 0 deletions docs/installation.rst
Original file line number Diff line number Diff line change
Expand Up @@ -102,3 +102,14 @@ Windows
See content in https://github.com/uber/causalml/issues/678


Running Tests
-------------

Run all tests with:

.. code-block:: bash
pytest -vs tests/ --cov causalml/
Add ``--runtf`` to run optional tensorflow tests which will be skipped by default.

1 comment on commit 06a5f8f

@ImanEmtiazi728
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When I want to install causalml package in jupyter notebook, I receive the below error;
Why?

ERROR: Exception:
Traceback (most recent call last):
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_internal\cli\base_command.py", line 173, in _main
status = self.run(options, args)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_internal\cli\req_command.py", line 203, in wrapper
return func(self, options, args)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_internal\commands\install.py", line 315, in run
requirement_set = resolver.resolve(
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_internal\resolution\resolvelib\resolver.py", line 94, in resolve
result = self._result = resolver.resolve(
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_vendor\resolvelib\resolvers.py", line 472, in resolve
state = resolution.resolve(requirements, max_rounds=max_rounds)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_vendor\resolvelib\resolvers.py", line 341, in resolve
self._add_to_criteria(self.state.criteria, r, parent=None)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_vendor\resolvelib\resolvers.py", line 172, in _add_to_criteria
if not criterion.candidates:
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_vendor\resolvelib\structs.py", line 151, in bool
return bool(self._sequence)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_internal\resolution\resolvelib\found_candidates.py", line 140, in bool
return any(self)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_internal\resolution\resolvelib\found_candidates.py", line 128, in
return (c for c in iterator if id(c) not in self._incompatible_ids)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_internal\resolution\resolvelib\found_candidates.py", line 29, in _iter_built
for version, func in infos:
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_internal\resolution\resolvelib\factory.py", line 272, in iter_index_candidate_infos
result = self._finder.find_best_candidate(
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_internal\index\package_finder.py", line 851, in find_best_candidate
candidates = self.find_all_candidates(project_name)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_internal\index\package_finder.py", line 798, in find_all_candidates
page_candidates = list(page_candidates_it)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_internal\index\sources.py", line 134, in page_candidates
yield from self._candidates_from_page(self._link)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_internal\index\package_finder.py", line 758, in process_project_url
html_page = self._link_collector.fetch_page(project_url)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_internal\index\collector.py", line 490, in fetch_page
return _get_html_page(location, session=self.session)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_internal\index\collector.py", line 400, in _get_html_page
resp = _get_html_response(url, session=session)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_internal\index\collector.py", line 115, in _get_html_response
resp = session.get(
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_vendor\requests\sessions.py", line 555, in get
return self.request('GET', url, **kwargs)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_internal\network\session.py", line 454, in request
return super().request(method, url, *args, **kwargs)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_vendor\requests\sessions.py", line 542, in request
resp = self.send(prep, **send_kwargs)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_vendor\requests\sessions.py", line 655, in send
r = adapter.send(request, **kwargs)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_vendor\cachecontrol\adapter.py", line 53, in send
resp = super(CacheControlAdapter, self).send(request, **kw)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_vendor\requests\adapters.py", line 439, in send
resp = conn.urlopen(
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_vendor\urllib3\connectionpool.py", line 696, in urlopen
self._prepare_proxy(conn)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_vendor\urllib3\connectionpool.py", line 964, in _prepare_proxy
conn.connect()
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_vendor\urllib3\connection.py", line 359, in connect
conn = self._connect_tls_proxy(hostname, conn)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_vendor\urllib3\connection.py", line 500, in connect_tls_proxy
return ssl_wrap_socket(
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_vendor\urllib3\util\ssl.py", line 453, in ssl_wrap_socket
ssl_sock = ssl_wrap_socket_impl(sock, context, tls_in_tls)
File "C:\Users\Iman\anaconda3\lib\site-packages\pip_vendor\urllib3\util\ssl.py", line 495, in _ssl_wrap_socket_impl
return ssl_context.wrap_socket(sock)
File "C:\Users\Iman\anaconda3\lib\ssl.py", line 500, in wrap_socket
return self.sslsocket_class._create(
File "C:\Users\Iman\anaconda3\lib\ssl.py", line 997, in _create
raise ValueError("check_hostname requires server_hostname")
ValueError: check_hostname requires server_hostname

Please sign in to comment.