Welcome back to my series on Recency Frequency Monetary (RFM) analysis. In part 1, I shared some background about RFM analysis and showed you how to create the calculated fields in Tableau Desktop. In part 2, we addressed the limitations of building the calcs in Tableau and pushed them to the data prep phase instead. With a nice clean data set, we’re now ready to visualize our data!!

 

Key Questions

We have this very rich data set, but what do we want to know about it? What questions would we like to answer about our donors and their activities and tendencies? Here are a few questions that come to mind immediately:

 

§  Who are our highest value donors right now?

§  How many donors are giving frequently?

§  Which previously loyal donors haven't given recently?

§  Who are we in danger of losing and what would be the impact of losing them?

§  Who are new donors we might not be aware of?

§  Which donors are most likely to "upgrade" and become our next champions?

§  Who gives large gifts infrequently?

§  Who gives frequent small gifts?

 

There are obviously many more questions we might ask, but I think this is a solid list that will allow us to get started with visualizing the data.

 

I want to create something that allows my users to view the entire list of donors, filter the list, sort the list, etc. then select a donor and perform a deep dive on that donor’s giving. Finally, I want to give my users the ability to compare that donor to other donors.

 

List View

I started by building the list view. This is largely just a table with all the key information about each donor. It includes the RFM scores and segment as well as the key metrics that determine those scores. It also includes a chart showing monthly donations over time. By default, the list ranked/sorted by RFM segment, but a parameter allows you to change that to any of the metrics and RFM score components. You can also filter on State, Donor Type, or RFM Segment.

 



Profile View

When you select a donor from the list, you’ll be sent to the profile page, which provides details about that donor. At the top, you’ll see basic information about the donor and the details of each RFM score component. At the bottom, you’ll see the jitter plot referenced in part 2, that allows you to compare the donor to all other donors, a chart showing donations over time, a table of detailed donations, and a fourth chart showing RFM scores over time (we’ll come back to momentarily).

 

 

Comparison View

While the profile page allows you to see the donor’s RFM Score in comparison to all others, this doesn’t allow detailed comparison of the RFM components and related metrics. The comparison view, however, provides similar jitter plots for Days Since Last Gift, Total Gifts, Total Gift Amount, Recency Score, Frequency Score, and Monetary Score.

 

 

Something’s Missing

After building these views, I felt pretty good about the tool I had created. It did a decent job of answering my key questions and allowing my users to answer lots of additional questions in an exploratory manner. But it also felt like something was missing.

 

First, it feels like we’re jumping right into detail almost immediately. I think we need some sort of overview that provides us with some high-level metrics. This will help us to understand, from a 10,000-foot view, how many donors we have, how much money is coming in, and where we might have some risks.

 

The second problem is a bit more complicated. The data allows me to do some amount of trending—of metrics like Total Gifts and Total Gift Amount—but it feels like those lack important context. For example, I might see that one of my donors had a huge spike in giving in 2020. I could conclude that that donor has been slacking the last few years, but I’d be missing key information. During the COVID years, donations to charitable organizations generally surged. So that spike in giving was likely to be observed across all of my donors. Looking at the raw donation amounts doesn’t allow me to see the donor in the context of all other donors. But that’s exactly what RFM is intended to do. In this scenario, it would be much more valuable for me to look at the trending of the Monetary score instead of the raw donation amounts.

 

Unfortunately, our data is only calculating current RFM scores. What we need is point-in-time RFM scores. We could try to make this work within Tableau, but it’ll be much easier to do in the data prep layer. So back to the data prep!!

 

Remember from part 2 that our existing data prep does the following:

 

1.     Read a csv file of donations.

2.     Enrich the data by calculating Last Gift Date, Days Since Last Gift, Total Gifts, Total Amount.

3.     Perform the numeric RFM Scoring 0-10.

4.     Label each donor with descriptive “Segments” based on the scores.

5.     Output a file containing all this information.

 

To get point-in-time scores, we’ll need to modify the process to take regular snapshots of the data. My modified Python and Tableau Prep processes create monthly snapshots (as of the end of each month). For example, let’s say we have donations for all of 2025. I’ll create one snapshot as of January 31, 2025 that includes all donations up to that date; then I’ll create another for February 28, 2025, including all donations from January 1 to February 28, etc. In total, we’ll have 12 snapshots. Then, we’ll perform RFM scoring on each of these snapshots. In the end, we’ll have monthly point-in-time RFM scores, allowing us to perform trend analysis on the actual scores instead of the underlying metrics.

 

We’ll also create one final snapshot (as of the latest date in the data) and mark it as the “Current” snapshot. That current snapshot will essentially be the same exact data set as we have been using. So, any time we just need the current information, we’ll filter to the current one only.

 

Overview View

I now feel like we can provide a much more in-depth view of this data. I started by creating an overview page that is intended to provide that higher-level view of information. At the top are several BANs including basic information like Total Doors, Total Gifts, etc., but I also added some to give us an idea of our risk profile.

 

$ From Top Donors tells us what percentage of our donations come from donors with Segment, “Champions” and “Platinum”. Currently, this is 3.5%. What that means likely differs depending on the type of fundraising, but this number seems extremely low. I’d expect a much larger percentage of my donations to come from my biggest donors. So, this may be an indication that I need to work those donors a little harder. If the number were larger, say 90%, then I’d have a completely different interpretation. This would mean that far too much of our funds come from a very small group of donors. Losing even one of those donors could have a huge impact on our ability to fund our projects. In that case, I’d be working hard to maintain those existing donors, while also working on broadening our donor base in order to reduce our risk.

 

$ From At Risk Donors tells us what percentage of our donations come from donors with Segment, “At Risk”. These are donors who have historically given consistently and high amounts, but who haven’t given recently. This number is 4.5% currently, which probably isn’t too bad, but I’d still be actively talking to those donors to figure out what’s going on and see if we can get them to re-engage. This metric gives us a directly actionable list of donors we can contact immediately.

 

In addition to the BANs, we have a chart showing a selected metric, chosen from the top right (default is Total Donors), for each RFM segment and a related chart showing this same information over time (using the snapshot information built earlier). The metrics available are Total Donors, Total Amount, Total Gifts, Amount Per Donor, Gifts Per Donor, and Median Days Since Last Gift.

 

 

Trend View

Finally, we have a trend view, which is similar to the Comparison view. Remember that the comparison view allows you to compare a selected donor to all other donors for six key metrics: Days Since Last Gift, Total Gifts, Total Gift Amount, Recency Score, Frequency Score, and Monetary Score. The Trend view does the same thing, but shows that information over time (using the snapshot data). This allows us to better understand the lifecycle of the selected donor and how that compares to other donors in context.

 

 

Wrap Up

Obviously, there’s probably a lot more you can do with this data, but I think this gives you a really good starting point for your analysis. If you’ve done your own RFM analysis in the past, I’d love to hear more about what you built and what key questions you were able to answer. Please drop a comment below.

 

If you want to review the workbook, you can check it out on Tableau Public: RFM Analysis. You can also find all of my Python code and Tableau Prep flows on Github.

 

Thanks so much for reading!!

 

Ken Flerlage, June 22, 2026

Twitter | LinkedIn | GitHub | Tableau Public


 


No comments:

Powered by Blogger.