Data Visualization for AI Prototyping: How Product Managers Validate Hypotheses Quickly

Namaste 🙏 and welcome to my blog. I write about product management, data science, and software engineering. For more: About Me | Mentoring | Blog | My Recommendations


AI started integrating in our daily lives in the form of humble Youtube, Amazon recommendations, to the addictive Instagram and TikTok reels, to chatbots, smart home devices, and so much more. However, AI got a lot more pervasive when companies like OpenAI (ChatGPT), Google (Gemini), Facebook (Llama), Microsoft (Copilot) built LLMs (Large Language Models) which had the capability to generate human-like conversations and enabled us to refine and steer conversations towards the length, format, style, detail, and language, we desired.

The growth of LLMs spawned several more use cases which allowed people to use AI in professional lives as well. So, while discussing the use cases with my fellow product managers, I figured there’s a lot of content on which tools to use & for which purpose. However, a lot of content on how to use those tools for niche use cases is still behind paywall.

That’s when, I decided to write a multi-part blog series on AI Prototyping where I will pick a tool and share a sample use case using step-by-step guides. The intent is not to overload you with a plethora of state-of-the-art tools, rather the focus will be on enabling you to use AI tools for your daily professional life as a Technical Product or Program Manager. 

Data Visualization
Data Visualization for AI Prototyping using Claude for Product Managers

Let’s start with a simple data visualization using Claude chatbot.

I have a CSV containing around 50,000 cross-border transactions with columns such as when was the transaction initiated by the customer, when did the beneficiary receive the funds, the destination & source currency, amount, and fees. There is a derived field, settlement time, based on the timestamp columns in the raw data. It essentially signifies how much time it took for a transaction to settle and the value could be instant, <1 hour, <3 hours, <6 hours, <12 hours, 24-72 hours. 

The full CSV can be accessed via this link: cross_border_transactions_20250128_213446

Sharing a snapshot for your reference:

Transaction Data CSV Sample

Based on the data, let’s try some prompts to generate simple intuitive visualizations of data.

“Visualize the top currency corridors based on volume and value”

Well, I would say Claude did a pretty decent job. You can view the live interactive version of this visualization (it’s a Typescript file that contains React code).

Some Key insights:

  • Major currency pairs (USD-EUR, USD-GBP, EUR-GBP) dominate both volume and value
  • Some corridors rank differently in value vs. volume (e.g., USD-CHF has higher value ranking than volume ranking)
  • USD is present in most top corridors, showing its importance as a global currency
  • Asian currencies (JPY, SGD) show strong presence but with different volume vs. value rankings

Claud also allows you to play around with its output and in fact, gives suggestions as to what you can instruct it to do/modify. That’s pretty cool! However, I would leave that up to your ingenuity when you try it on your own.

Let’s try a few more visualizations with a bit more complexity.

“Visualize the % of the settlement times for all the destination currencies”

You can view the live interactive version of this visualization (it’s a Typescript file that contains React code).

It’s a pretty sophisticated visualization with just 1 line of prompt honestly! It shows the % distribution of the volume of a particular currency based on its settlement time. For example – Major currencies (USD, EUR, GBP) have:

  • Higher percentages of instant settlements (25-30%)
  • Faster overall settlement times
  • Lower percentages of 24-72 hour settlements

Whereas, currencies like INR show:

  • Lower instant settlement percentages (10%)
  • Higher percentages of longer settlement times
  • More even distribution across the middle categories

Pretty neat!

Now, let’s look at the fee distribution.

“Visualize the fee. Transacting in which currency pair costs the most? Is it a safe hypothesis that the fee remains constant for a currency pair or can it be different? Help answer all these questions by visualization.”

You can view the live interactive version of this visualization (it’s a Typescript file that contains React code).

Claude presented several insights to my prompt.

  1. Most Expensive Currency Pairs:
    • USD-INR has the highest average fees ($45.2)
    • GBP-INR and EUR-IDR follow closely
    • Generally, corridors involving emerging market currencies have higher fees
  2. Least Expensive Currency Pairs:
    • EUR-GBP has the lowest average fees ($20.5)
    • USD-GBP and USD-EUR also have relatively low fees
    • Major currency pairs consistently show lower fees
  3. Fee Consistency:
    • Fees are NOT constant for any currency pair
    • There’s significant variation between minimum and maximum fees
    • Factors affecting fees include:
      • Transaction size (larger transactions tend to have higher absolute fees)
      • Market conditions
      • Time of day/market liquidity
      • Payment method
      • Correspondent bank relationships
  4. Fee Structure Insights:
    • Base fees exist for all transactions
    • Fees scale with transaction size but not linearly
    • Major currency pairs have smaller fee ranges
    • Emerging market corridors show wider fee ranges

You can also try to modify the fee visualization a bit by asking Claude to

Add additional metrics like fee as a percentage of transaction value” OR

Break down the fees into different components (correspondent fees vs. other fees)”.

So hopefully you get the gist. A small side note that the transaction data is also generated from Claude. I gave it a crisp prompt and it delivered the CSV exactly how I wanted. The prompt was:

Generate a csv containing transactions.

  • The transactions can be initiated in currencies like SGD, USD, GBP, HKD, AUD, JPY, CHF, AED, EUR, NZD, NOK, DKK, CAD
  • The payments can be made to any currency in the world to any country (except the US sanctioned countries like North Korea, Syria, Lebanon, Iran, Russia, etc.)
  • There’s no lower or upper limit of the transaction amount that can be sent. 
  • You need to capture the payment initiation date-time and the date-time at which funds reached beneficiary’s bank account.
  • Some payments can be settled instantly, <1 hour, <3 hour, <6 hour, <12 hour, <24 hour, 24-72 hours. Incorporate these times when capturing date-time mentioned in point 4. 
  • Usually instant or <3 hour settlement can happen only in major currencies and/or countries having an established instant payment rail which allows banks in other countries to send money instantly. 
  • Also capture correspondent or any other type of fee (if levied) to the customer
  • Generate the data for last 1 quarter. Assume 50,000 cross-border transaction volume on an average in a quarter and approx 1.5 Billion dollar of value.

Claud generated the code which I then ran in JupyterLab. My python notebook threw several errors related to package installation errors or other random environment errors. Claude tried its best to fix the errors but what amazed me was its ability to adjust and pivot with every error. Super impressed!

Leave a Reply