Solutions to “Just KNIME It!” Challenge 8 - Season 4

:boom: We’re back for another week of Just KNIME It! :boom:

:airplane: Let’s explore some data wrangling techniques to understand how loyal airline customers are distributed across different demographic segments. Who are the most loyal customers and how are they segmented in different locations?

Here is the challenge. Let’s use this thread to post our solutions to it, which should be uploaded to your public KNIME Hub spaces with tag JKISeason4-8 .

:sos: Need help with tags? To add tag JKISeason4-8 to your workflow, go to the description panel in KNIME Analytics Platform, click the pencil to edit it, and you will see the option for adding tags right there. :blush: Let us know if you have any problems!

2 Likes

Here is my solution to the challenge:JKISeason4-8 – KNIME Community Hub

3 Likes

Hi all,

Nice challenge allowing us to play with other type of visualizations, such as the Choropleth Map component.

Solution here: JKISeason 4-8 - Airline Customer Loyalty – KNIME Community Hub

In this one, I am reading the data, grouping the flight history and joining with customer data. Then removing the customers that cancelled their loyalty membership.

I calculate the loyalty score using a simple formula in which we can specify weights (e.g., number of flights are more important). This is not using config nodes, but directly within the expression node - this could be improved. Values are normalized before calculation.

And Choropleth Map component always improve dashboarding.
The visualization allows the user to filter the number customer we want to keep (based on the loyalty score, best first).


Enjoy all!
Cheers
Jerome

6 Likes

Hi everyone,

Here’s my submission for this week’s challenge: JKISeason4-8 – KNIME Community Hub

Data Preparation
I filtered out customers who are no longer enrolled and calculated a loyalty score using a weighted combination of normalized CLV and normalized accumulated points.

Data Visualization
Users can select different fields to explore the data and view the top 10 most loyal customers, ranked in descending order by their loyalty score.


Wishing you all a great day :sun_with_face:!

6 Likes

Hey BRO,
I just had a chance to explore your submission — fantastic job! :clap: Your visual storytelling is incredibly clear, and that geo-mapping analysis added a whole new dimension I haven’t quite dared to explore yet myself. :earth_africa:

While reviewing your Loyalty Score formula, I noticed you included both total_flights and flights_with_companions. Just wanted to share a small perspective I picked up during my process: in the dataset, total_flights is the sum of flights_booked and flights_with_companions, so I realized that including both total_flights and its components might unintentionally overweight that particular metric.

Of course, context and assumptions matter — and your approach still delivers solid insights. I’ve genuinely learned a lot from the way you presented the data, especially with those elegant visuals!

Thanks for the inspiration — let’s keep pushing each other forward! :bulb::rocket:

keep KNIMING IT
Pierp

2 Likes

Hi KNIME’ers :wave: :slightly_smiling_face:

This week’s challenge was super exciting: a Canadian airline wants to understand who their most loyal customers are. :airplane::canada:

To solve it, I applied the RFM Analyst method — a powerful way to segment customers based on Recency, Frequency, and Monetary (or Points). :bar_chart::pushpin:

2 Likes

What an inspiring geo-journey, solution WOW :clap: :clap: !
Your mastery of the Geospatial extension is nothing short of monumental—each insight more dazzling than the last.
:earth_africa::sparkles: I especially loved the way you layered customer clusters with a sunburst; it’s like watching a data-driven blockbuster unfold.

One tiny (and admittedly nit-picky) footnote: don’t forget that there’s a London in Ontario, too—not just the one across the pond! :wink:

Thanks for sharing such a polished walkthrough—your work keeps raising the bar for all of us in the KNIME community.
Looking forward to your next geo-masterpiece! :clap::rocket:

P.S. These challenges are starting to feel like a full-time gig—now I really need to hustle to finish mine!

2 Likes

My solution to this weeks challenge (I used points accumulated to rank loyalty):




2 Likes

Hey @PVergati
Thanks for your message! You always have nice words.

Agreed, my formula can (needs to) be improved - this metric might be overweighted.
It depends also on the rules of the company - what about if the company cares about the overall engagement (volume of travel, total_flights) and wants to reward group travels (flights_with_companions)? Just thinking out loud.

Hope you will be ready to publish soon!

Cheers
Jerome

1 Like

Thanks a bunch, @PVergati :smile:

Really appreciate the kind words, it totally made my day!

And yep, you got me :sweat_smile: I totally missed that there’s a London in Ontario too. Thanks for pointing it out so nicely! I usually squeeze these challenges in between other stuff I’m working on, so sometimes the details slip past me.

Can’t wait to see what you come up with this week, let’s keep having fun with these challenges!

Happy KNIME’ing from Jakarta :wave: :slightly_smiling_face: :indonesia:

1 Like

Airline Customer Loyalty – My KNIME Solution :airplane::jigsaw:

Finally I succeded to complete my solution (I’m working too much in this period :sweat_smile:).
I’m excited to share my solution for profiling most loyal flyers:

My solution to JKISeason4-8

  1. Data Filtering
    • Removed “cancelled” customers by checking
    Cancellation Year/Month not missing → disqualified
    – missing dates = still active, kept in analysis

  2. Tenure Score
    • Calculated months since Enrollment Date via → normalized to [0,1]
    • Longer-tenured customers generally show stronger loyalty

  3. Loyalty Card Multiplier
    • Mapped card tiers (Aurora→1.00, Nova→1.10, Star→1.25) with Rule Engine

  4. Global Loyalty Score
    Combined eight normalized indicators in a Math Formula:

(0.25 * CLV +
 0.10 * Tenure_Score +
 0.20 * Flights_Booked +
 0.10 * Flights_with_Companions +
 0.10 * Distance +
 0.10 * Points_Accumulated +
 0.07 * Points_Redeemed +
 0.08 * DollarCost_PointsRedeemed)
* Card_Weight
  1. Loyalty Tiers
    Segmented via Rule Engine:
≥ 0.80 → “Top Tier”
≥ 0.60 → “High Loyalty”
≥ 0.40 → “Medium Loyalty”
else   → “Low Loyalty”

Icons added for clarity: :crown:, :credit_card:, :ticket:, :turtle:
6. Geospatial Visualization
• a quick overview of results (Nr of customers and Global Loyalty Score by province)

An interesting TIP I don’t know if someone already noticed it but I discovered that “Newfoundland” must be “Newfoundland and Labrador” to geocode correctly—turns out place names can be trickier than booking codes! :sweat_smile:

Some screenshots of the visuals but other colleagues made stunning and very inspiring visuals.

Thanks to @trj , @arief_rama, @hanantoprabowo for the brain storming

I’m still mastering KNIME’s map tools, so if anyone has tips for handling duplicate place names (hello, US cities with the same name!), I’d love to learn your approach. Let’s keep sharing ideas and refining our loyalty models together! :rocket::handshake:

5 Likes

One of the cool features of KNIME is the ability to repurpose old workflows.
Wanted to map the customer locations and some standard tries to get the geocordinates failed - with mapping of some of the cities to strange non-Canadian locations. Ended up using the AI query component from an earlier challenge to pull them.
As an aside, I really wanted to map the postal codes but could not do this from any open source.

Also used the AI ML component from an earlier challenge to try and identify key features for Loyal and not-Loyal customers (ie the one’s who cancelled). This gave length of membership and points earned as key categories - not surprising.

The visualization needs some more work but enough is enough!

3 Likes

Hello team,

Here is my solution to this week’s challenge:
JKISeason4-8

I enjoy seeing the other workflows on this challenge to learn new creative/clever ways to solve problems.

1 Like

Here’s my solution. It produces a static table:
Top 100 Loyal Customers (# Flights)
and the following dynamic outputs:
Number of Loyalty Card Types table
Number of Loyalty Members chart
Total Flights chart
Booked flights chart
Companion Flights chart
I made no attempt to construct a “loyalty score.” I simply used the number of flights as a loyalty indicator. It seems to me that things like flight length have little to do with customer loyalty. It certainly can be argued that long flight customers may be more desirable, but the loyalty weight is questionable without knowing about viable competition, etc.

I used the Generic ECharts which proved to be tricky if you want them to dynamically change without manually recoding. I finally figured out how to pass them an array flow variable which did the trick. Here are the steps:

  1. Multiple Selection Widget
    1 Selection Widget
  2. Create Array Variable
  3. Pass variable to chart and limit number of groups to 10 (can be changed)

    4 Dynamic Rule Engine
  4. Use array variable in EChart node.
  5. This permits changing group inputs with no code changes.

2 Likes

Find my Submission : Loyalty Scoring Model with weighted scores and normalized values . Built over 5.5 capabilities



5 Likes

:clap::clap::clap:
Stunning visuals

1 Like

Hello everyone!

Due to the limitations of my corporate laptop, I couldn’t perform neither API related nor AI related tasks for some weeks but here I am back with a proposed solution to the 8th challenge!

Have an awesome week <3

1 Like

My solution to the challenge. Just in time :smiley:

I did a PDF report that consists of the necessary information (I really love the PDF feature!). My steps:

  1. I geocoded the cities
  2. I have created “three” report pages
    2.1 Cover page
    2.2 Overview page
    2.3 Details pages for all the cities (29)

In this way my pdf has 31 pages (1+1+29). Because of that, the loop is slow (5-10 min).



Due to time constraints this week, I couldn’t explore every angle, but I aimed to make the report visually appealing and easy to navigate. I’m always open to feedback and suggestions for improvement! :slight_smile:

5 Likes

:airplane: Now boarding: talented data visualization specialist with a flair for elegance and a tolerance for long loops. Final destination: Singapore Airlines’ Advanced Reporting Department. :flight_arrival:

if this is what you deliver when you’re short on time… I’m both impressed and mildly intimidated :sweat_smile:. Your 31-page PDF isn’t just a KNIME report — it’s basically a first-class cabin experience in data form. All that’s missing is a glass of champagne and a hot towel :clinking_glasses::soap:… (I’ll write you my address to have a complete service).

The 5–10 minute loop? Totally worth it. Feels less like a delay and more like an intentional intermission to admire the view :eyes::bar_chart:.

You didn’t just present data — you staged a performance. Bravo :clap:t3:

1 Like

Thank you @PVergati, you are too kind! :slight_smile: As last time, your detailed solution provided me the main inspiration :slight_smile:

1 Like