Smart Campaign

The Problem

Airlines run campaigns all the time — Black Friday deals, holiday promotions, seasonal offers. But most of these campaigns are based on gut feeling. Someone at Finnair decides "let's do a campaign for London flights" because it is popular, not because they know which specific customers actually want to go to London right now and why.

The result: generic emails that feel like spam. Customers ignore them, and the airline wastes marketing budget on people who are not interested.

We want to flip this. Instead of starting with "what should we promote?", start with "what do our customers actually care about?" — and then find the right offer for the right person.

The Approach

The pipeline has four stages. Each one feeds into the next.

1. Customer Preference Modeling

We pull open data from customers' Facebook profiles — likes, posts, music preferences. Then we use machine learning to build a preference graph for each customer.

For the demo, we focus on music. From a subset of the One Million Song dataset, we get seed artists and query Spotify's API for similar artists. This gives us a graph of artist relationships. We then filter this graph based on each user's actual music taste to find artists they are potentially interested in but have not discovered yet.

Artist similarity graph — mapping customer preferences

2. Event Extraction

We pull live event data from Ticketmaster globally and in real-time. Then we cross-reference these events with Finnair's destination cities. The result is a map where each city's bubble size represents how many Finnair customers are interested in events happening there.

This is where it gets interesting — the map is not showing popular cities. It is showing cities that matter to this specific set of customers. London might be big because many Finnair customers like artists performing there, not because London is generally popular.

Event density map — bubble size shows Finnair customer interest per city

3. Event Re-ranking

Events are re-ranked based on aggregated customer preference scores. So a Shakira concert in Zurich with 127 interested Finnair customers ranks higher than a niche event with 5. This helps Finnair's marketing team prioritize which events to build campaigns around.

Event re-ranking by customer interest — Shakira in Zurich, 127 interested

4. Customer-Event Matching

For each high-potential event, we generate a list of customers who are most likely to be interested. This is the precision marketing part — instead of emailing all 500,000 customers about a Shakira concert in Zurich, we only target the ones whose preference graph actually connects to Shakira or similar artists.

Customer matching — who is most likely interested in this event

5. Ticket Recommendation

Finally, we generate the actual campaign. The customer gets a personalized email that combines the event information with a Finnair flight offer to that destination. The price comes from Finnair's open API.

The email does not feel like a generic promotion. It feels like "hey, Shakira is performing in Zurich on Dec 1st, and here is a flight for €537." That is a very different experience from "check out our winter deals to Zurich."

Generated campaign email — personalized event + flight offer

Why This Matters

The core idea is simple: campaigns should be driven by data, not by calendar dates or gut feeling. The data already exists — social media preferences, event listings, flight APIs. Nobody is connecting them together. We build the pipeline that does.

The same pattern applies beyond music. Sports fans, food festival enthusiasts, conference attendees — any interest that leads to travel can be matched to destinations and flights. Music is just the easiest to demo because the data is clean and the APIs are good.

Technology Stack

  • Data processing: Python, Jupyter Notebook
  • APIs: Facebook Graph API, Spotify API, Ticketmaster API, Finnair Open API
  • Frontend: JavaScript, HTML/CSS