2 What is the Disco Engine?

If you happen to have an APRA account, this article in APRA Connections magazine is a good introduction. If you don’t have an APRA account, then read on . . .

The Discovery Engine, or Disco Engine, is a prospecting tool that empowers Prospect Development staff to precisely define (and pull together) constitutencies for their fundraising clients. It does so by providing two complementary resources: a vocabulary and grammar for specifying constituencies, and tools to facilitate discovery of constituencies.

2.1 Vocabulary and Grammar

The Disco Engine is based on the idea that a constituency can be defined using one or more predicates (such as “majored in math” or “attended a Discover Cal event”), where multiple predicates are combined using “and”, “or”, or “but not.” To illustrate, here is a sample constituency definition for the department of mathematics:

majored in mathematics or has given to the math department

The constituency is then just any individual who fits the definition.

The most basic tool that the Disco Engine provides is called a widget, which is a tool for generating a simple predicate. For instance, the widget majored_in allows us to build the first part of our example definition:

majored_in(mathematics)

Furthermore, the Disco Engine provides the following connectors to combine predicates in order to create more complex definitions:

  • %and%
  • %or%
  • %but_not%

So in the language of the Disco Engine, our definition would look like:

majored_in(mathematics) %or% gave_to_department(mathematics)

There is no limit to the number of predicates that can be strung together to form a definition:

majored_in(mathematics) %or%
    gave_to_department(mathematics) %and%
    lives_in_msa(san_francisco)

These definitions can quickly become very complex. To manage that complexity, the Disco Engine provides the ability to assign names to definitions, that can then be used to construct more complex definitions:

is_math_constituent = majored_in(mathematics) %or% 
    gave_to_department(mathematics)

local_math_constituent = is_math_constituent %and%
    lives_in_msa(san_francisco)

parent_of_local_math_constituent = parent_of(local_math_constituent)

Together, the collection of predicates, the logical operators, and the ability to assign names form an expressive language for describing custom constituencies for a variety of purposes. Best of all, the Disco Engine gives us the ability to pull the IDs of a defined constituency from the database!

display(parent_of_local_math_constituent)
## # A tibble: 561 x 1
##    entity_id
##        <dbl>
##  1      1168
##  2      4522
##  3      6322
##  4      6326
##  5      7644
##  6     11512
##  7     23989
##  8     24151
##  9     24247
## 10     26492
## # … with 551 more rows

2.2 Facilitating discovery

Having a clear language for prospecting and defining constituencies is nice, but Prospect Development is increasingly being asked to do affinity-based prospecting, which often involves defining new constituencies that don’t have clear-cut coding associated with them yet, or digging into student activity, interest, affiliation, and other codes to figure out which ones might fit the constituency to be defined. That need motivates the Disco Engine’s bots, such as the brainstorm bot and the matrix bot. We’ve already seen examples of using predicates to find individuals, but bots allow us to search for predicates.

brainstorm_bot("robot*", "artificial intelligence", "AI")
## attended_event 
##     8760: Robots on the Edge:Intelligent Machines
##     9139: AI Energy Alumni Panel & Firm Night
##     8759: Fireside Chat w/Tom Siebel:  AI and IoT
##     9141: AI Business Behaving Well: Social Resp.
##     9361: Inclusive AI: Technology and Policy
##     9140: AI Career Coach Information Session
##     6724: Haas East Bay Chp Robotic Event 06-18-14
##     9325: BARS 2017: Bay Area Robotics Symposium
##     9136: AI Getting Smart about Start-Ups
##     9497: Putting AI to Work: Tech & Policy
##     9498: WIT: Future of AI
##     8761: Silicon Valley Forum: Medical Robotics
##     9147: AI Coaching with Niandong Wang MBA '04
##     9280: AL SD Content AI Impact on Life
##     9431: SVF: Robots on the Edge
##     9138: AI Learn how to Write a Powerful Resume
## attended_hs 
##     471828: Cb-Ai Operations S&L
## fec_gave_to_committee 
##     C00596908: ROBOTECHNOLOGY INC C.R.
##     C00521765: LIQUID ROBOTICS INC POLITICAL ACTION COMMITTEE (LIQUID ROBOTICS PAC)
##     C00144261: APPRAISAL INSTITUTE PAC (AI PAC)
##     C00717249: RALLY ROBOT ZAPS AOC
##     C00582767: CAMPAIGN FOR A FEDERAL ROBOTICS COMMISSION
##     C00635748: AI PAC
##     C00717074: RALLY ROBOT 2020
## has_interest 
##     AIN: Artificial Intelligence
##     ROB: Robotics
## participated_in 
##     UROB: Robotmedia Presents
##     RENY: Robotics & Engineering for Youth
##     ENRO: Cal Robotics
## sec_filed 
##     1409269: Restoration Robotics, Inc.
##     1528557: Corindus Vascular Robotics, Inc.
##     1409269: Restoration Robotics Inc