Monday, March 3, 2014

ColdCall: A zKB Recruitment Tool

Probably going to make some waves among the anti-API crowd with this one, but it was a seriously fun experiment.  zKillboard's API continues to be one of my favorite data sources, and a lot of work in January paid off into what I was hoping would be an exciting new tool.

Over the month of February, Aideron Robotics leadership wanted to push new membership.  Mostly to fuel our desire to be the 900lb gorilla in Essence, but the B-R5RB fight brought a huge surge of new players and that only doubled our desire for new members.  To facilitate this, an all out media offensive was waged: pushing fight videos to /r/eve, podcasts, forum spam, blogs and blogs, open fleet nights... and lastly, our sekret weapon ColdCall.

What is ColdCall?

How many times have corp leaders mused: "If only we could parse killboards to find PVPers in line with our goals"?  ColdCall is my attempt to answer that need.  By essentially building a local mini copy of zKillboard, recruiters can directly manipulate the pilots list with SQL, then use publicly-available EVE API feeds to get some basic information about those candidates.

In Aideron Robotics, we used a very basic query to identify Federal Defense Union (Gal FW NPC) pilots active in our timezones and would probably be picked up by someone in the warzone through open fleet or convo means.  Also, we have worked to expand the queries to include corps that might register as "dead corps" where one or two members are active.

We used the automated candidate list to then feed to recruiters.  Recruiters grade the candidates manually on "hireability" checking their kill/in-game records for info like:
  • Active Systems
  • General record (filter out farmers/lone-wolves)
  • Approximate age
  • Approximate skill level
  • Approximate activity level
Most of those criteria could be automated with a little more work, but I don't want to cut out humans to the point where we were just blindly sending out form letters.  Instead, recruiters identify high-quality NPC pilots, invite them to fly with us in an Open Fleet Night. The goal is to let candidates decide if Aideron is the right fit for them.  We filter out outstanding invitations, and only send out invites to newly identified candidates.  The idea is outreach, hopefully avoiding spam.

How Does ColdCall work?

TL;DR, ColdCall works in a 3 stage process.  We then upload the result CSV to gdoc for some filtering to avoid spamming outstanding invites.

Stage1: Scrape zKillboard

The first stage takes a very-wide query and scrapes back as many days as the script runner decides valuable.  In Aideron Robotics case, we keep a 45-day record of all kills/losses with factionID=galmil.  Then, using zkillboard's own participants table structure, ColdCall stores off all the participant data.  It also stores off fitting data, but I currently don't leverage that in AIDER's version.

The goal with the first stage is to scrape the lowest-common-denominator of kill criteria.  Trying to locally recreate the ENTIRE zKillboard database is a fool's errand.  Instead, limiting queries to specific criteria like region, ship group, date range, lowers a potential 30M+ kill list to <100k.  The narrower this first step, the faster the rest of the program will run.  zKillboard's API is the biggest bottleneck for this program.

Stage2: Filter A Candidate List

ColdCall accepts a SQL argument to filter the Stage1 results.  For AIDER, this looks like:
  • Active in US TZs
  • More than 5 kills+losses
  • Member of FDU
  • Activity in the last 20 days
This lends itself to iterations with different criteria.  For instance, we want to extend the view to look at EU candidates.  Also here is where we can identify other criteria like "Few active members in a med/large corp" or even filter further to look into fittings/preferred ships, or active area.  

As of release, this isn't as flexible as I'd like.  In a future release I'd like to make the only feed-forward requirement of this stage be CharacterID.

Stage3: Build a character profile

Stage3 combines a look at public API data (corp history, join date, character name) with a second-pass of zKillboard data for more direct stats.  This results in a final candidate list with everything you'd want a recruiter to look at.  Currently, this stage is a little more rigid than I'd like, but it gives our recruiters what they need.  This stage is going to be the focus of future releases.

How Well Did It Work?

Before my inbox is spammed with screams of hax, cheating, spam, or what have you, I gotta say the results are not as hot as I had expected.

On the data side, ColdCall did exactly what I wanted it to do.  Identified candidates met our outreach criteria extremely well, and as a corp-advertising outreach it gave us a pretty decent signal boost.  Unfortunately, joining a corp is an extremely social activity and a cold invite, no matter how tailored, doesn't really get people to apply.  Also, data does not paint the whole story, and many candidates responded that they weren't ready to join a corp.  

In February, we identified 58 candidates through ColdCall, and 9 joined.  Compared with 3x the new-hires identifying High Drag as their inspiration to join.  The usual turn around time was over 2 weeks, so almost all our expectations on returns fell extremely short.  We still intend to use ColdCall to identify players, but it is definitely a 3rd tier option in our recruitment outreach.  

TL;DR for all the recruiters out there: nothing beats social operations.  Blogs, podcasts, and videos got the AIDER name out there.  Open Fleet Nights got candidates to interact with our existing staff.  ColdCall has only proved useful to check our conversion rate vs other galmil corps... not actively recruit them.

Feel free to fork a version for your own needs.  The repo has been left open.  The program will continue to grow as per AIDER specifications, but features should grow for general use.

Thanks Due

Huard Catanach: helped big time in getting the tool outlined and feedback on filtering candidates.  He handled all the outreach and most of the candidate grading.  

Marcel Devereux: Helped with sticky points in the code.  Specifically encouraging use of the zKillboard SQLs as a framework.  Also helped a while back get my head around eveapi and inspiration to push out a module.   

This would not have been done if it weren't for Aideron Robotics and the dev-rich environment it provides.  It was easy to get quick feedback to move through the development process and release a usable alpha in record time.