Finding mergers/acquisitions from NIC transformations

⬇️ Download determine_acquistion.py

This tool illustrates reasoning with the NIC graph database by attempting to deduce the change in ownership preceding a NIC transformation, which only records the date of the charter discontinuation (or split, etc.).

It works by finding the high holders of the predecessor and successor of the transformation and looking at when the predecessor’s high holder changed to the successor’s. This is limited in that the successor may not have existed at acquistion time, making the tool an approximation.

Preparation

Be sure to have neo4j and the NIC database installed. The tool requires python3 and depends on the neo4j python library (pip3 install neo4j). The script assumes the database is named “neo4j” (the default when creating a new DBMS) and has password “password” and that the database is currently running (see the instructions) for details.

Example 1

The tool takes an RSSD and checks each transformation where the RSSD is the predecessor:

python3 determine_acquisition.py 313241

If the tool determines there is a preceding high holder, it will output a cypher query to show the entities involved in the acquisition, e.g.,

match transformation = (predecessor{ID_RSSD: 313241})-[:TRANSFORMATION]->(successor{ID_RSSD: 673440})
match predpath = ({ID_RSSD: 1096505})-[:RELATIONSHIP]->({ID_RSSD: 1133530})-[:RELATIONSHIP]->({ID_RSSD: 313241})
match succpath = ({ID_RSSD: 1096505})-[:RELATIONSHIP]->({ID_RSSD: 673440})
match previousowner = ({ID_RSSD: 1133530})-[:RELATIONSHIP]->({ID_RSSD: 313241})
return transformation, predpath, succpath, previousowner;

In this example, the BENTON BRANCH (313241) transformed into FIRST SECURITY BANK (673440) on this transformation occurred on 06/12/2009.

The tool determines that RSSD 1096505 is shared between the predecessor and successor and finds that RSSD 1133530 owned the BENTON BRANCH before it was acquired on 08/28/2008 and ultimately transformed.

Example 2

python3 determine_acquisition.py 1557

1557 transformed into 246956 on 02/12/2018. They shared high holder, 2942850, which began to own the predecessor on 04/15/2013.

The tool produces this query to show the relevant nodes:

match transformation = (predecessor{ID_RSSD: 1557})-[:TRANSFORMATION]->(successor{ID_RSSD: 246956})
match predpath = ({ID_RSSD: 2942850})-[:RELATIONSHIP]->({ID_RSSD: 1557})
match succpath = ({ID_RSSD: 2942850})-[:RELATIONSHIP]->({ID_RSSD: 246956})
match previousowner = ({ID_RSSD: 1557})
return transformation, predpath, succpath, previousowner;

Example 3

python3 determine_acquisition.py 1246092

RSSD 1246092 transformed to 1951350 on 12/31/1993, but the tool finds no shared high holders, so it cannot infer if or when there was an acquistion. This could be the case if the predecessor itself is the high holder.

The transformation can be explored starting from this query:

MATCH (predecessor {ID_RSSD:1246092})-[:TRANSFORMATION]->(successor {ID_RSSD:1951350}) RETURN predecessor, successor

Example

python3 determine_acquisition.py 1010145
match (n{ID_RSSD: 1010145})
match (m{ID_RSSD: 742047})
match (p{ID_RSSD: 1206630})
match (q{ID_RSSD: 1202212})
return n,m,p,q;

Interpreting the results

Below explains the result sections and what they mean, and how they can be interpreted. We also provide an example output we receive when running the following in the command line inside of the CETA git repository

python3 ceta/experiments/determine_acquisition/determine_acquisition.py 1557

Transformation Edge

The first thing that appears is information about the transformation edge. This is useful if a predecessor entity has several transformations as you will be able to determine which transformation you are interested in.

image

High Holders Paths

This section consists of date ranges and the path from the entity to its high holder. It is a two-part section, one for the predecessor node and one for the successor node.

image

High Holders

This next session are the high holders only, disregarding the path we found. It is also broken into two parts, one for the predecessor’s high holders and one for the successor’s high holders.

image

Shared High Holders

This section demonstrates the shared high holders without factoring in time. This means that at some point, both the predecessor entity and the successor entity exist under the same high holder entity, however it does not mean they were under the same high holder at the same time.

image

Non-Shared High Holders

This section demonstrates the non-shared high holders between the predecessor and successor. These are high holders that were not high holders for either the predecessor or the successor.

image

Time-Overlapping High Holders

This section demonstrates the high holders that were not only shared between the predecessor and successor entities, but also were shared at the same time. This is where we source our acquisition time.

image

Earliest Overlapping (Acquisition Point)

Here we output the earliest overlapping high holder and the time when that relationship began. This is what we consider the Acquisition Point. Currently it can catch many cases, however we hope to expand the acquisition date detection in the future.

image

Previous High Holder (Before Acquisition)

Here we output the high holder we detected prior to the predecessor being acquired. –>

image

Display Query

Lastly, a query may be printed to display the information visually. You can copy and paste the generated Query into the Neo4j Browser in order to get a better understanding of the entities by having a visual understanding of the relationships.

image

By opening the Neo4j Browser and copying and pasting this query, we receive the following visual representation:

image