VOOZH about

URL: https://towardsdatascience.com/healthcare-prices-fuhgeddaboudit-f642b0e1ae9c/

⇱ Healthcare Prices? Fuhgeddaboudit! | Towards Data Science


Healthcare Prices? Fuhgeddaboudit!

Insights from the NYC Public Hospital System's Price Lists

15 min read
👁 Image

Click here to access the project in GitHub and Jovian.


Imagine you’re going to buy a new iPhone. First you go online to www.apple.com. You can see the latest iPhone models, but no prices are listed. You know that the one with the better camera probably costs more than the one with the worse camera, and the bigger one probably costs more than the smaller one, but you have no idea how different the prices really are. So, you call Apple’s customer service line and ask what the price is for the iPhone you like most. They say, well it depends on which Apple store you go to. And it also depends on what cellphone plan you have. The phone will be one price if you are on a Verizon family plan, and another price if you are on a Sprint individual plan, and so on. And even if we know your cellphone plan and which store you’re going to, we probably won’t tell you the price of the phone until after you’ve already bought it.

This sounds like a total scam! But this is how Americans purchase medical care each and every day – and we’re all just kind of okay with it.

Thinkin’ about healthcare prices like…

👁 source: https://knowyourmeme.com/memes/math-lady-confused-lady
source: https://knowyourmeme.com/memes/math-lady-confused-lady

Fortunately, the federal government has taken some small steps to try to bring more transparency and clarity into this convoluted market. There is a law that went into effect in January of 2021, which requires hospitals to publish the prices of their procedures in a machine readable format. This (theoretically) includes all procedures’ list prices, discounted cash prices (i.e. the price paid by the uninsured), and prices negotiated by insurance companies. Before this law, hospitals and insurance companies could keep their negotiated rates a secret. Now, this is all supposed to be publicly available information.

This new law is great! In theory. In practice, the fee for noncompliance is only $300 per day per hospital. That fee is way too low to actually incentivize most hospital systems to comply. I live in New York City, so I’ve been especially interested in whether most NYC hospitals will comply anytime soon. Unfortunately the answer is… no! Check out this article about it in Gothamist (sadly, the situation has not changed much since the article published on 1/18/21).

One hospital system that HAS published pretty helpful data is the NYC public hospital system: NYC Health + Hospitals. Armed with this data, I have done a very simple analysis of how prices differ:

  1. By List Price vs. Cash Price vs. Negotiated Price per procedure (within the same hospital)
  2. By List Price and Cash Price for the same procedure across the different hospitals within the NYC public hospital system

This is a very high level look at the data, and further analyses should dive into the results at a procedure-level. An example of this type of granular analysis can be found in the WSJ’s deep dive into the price of a C-section in California’s Sutter Health System. SparkNotes: the price ranges from ~$6k-$60k depending on your insurance plan.


Data Prep

All of the data used in this project can be found on the NYC Health + Hospitals facility charges page (although I pull in the data automatically using the pandas read_csv function). I add the hospital name to each hospital’s price list, merge the datasets, and label each procedure as either an "Inpatient" or "Outpatient" procedure based on its procedure code. I exclude all procedures with a List Price < $1, because I noticed they seemed to mainly be weird, Medicare-specific codes that were just skewing the data.

Next, I derive an "Adjusted Cash Price" by using the Cash Price if it is not null and if it is lower than the List Price, otherwise I use the List Price. It didn’t make sense to me for the Cash Price to be higher than the List Price. From looking at the data, it seemed the Cash Price was set at a less granular level than the List Price. For example, every procedure related to a certain high-level medical code might have a $500 Cash Price, even if individual procedures that fall under the same medical code have a List Price of, say, $25. For this $25 procedure, I set the Adjusted Cash Price at $25, not $500. You might think this is a bad assumption to make, but alas… I made it.

Just one quick shout out: np.where() rocked my world. **** For distinguishing between Inpatient/Outpatient procedures and for my Adjusted Cash Price calculation, I wanted to create a new column with values dependent on a couple of criteria. I tried a bunch of ways of doing this in pandas, but np.where() was simplest and fastest.

Next, for each row in my dataframe I calculate the percentage difference between the Negotiated Price vs. List Price, Cash Price vs. List Price, and Negotiated Price vs. Cash Price. In these calculations, I assume that if the Negotiated Price is null I should use the List Price in its place (since the insurance plan just didn’t negotiate a price for that procedure).

As a final data cleaning step, for the dataframe I use in Part 1 of my analysis I drop all procedures if they do not show up at least once for each insurance plan at each hospital. I want to make sure that if I’m comparing data across insurance plans, I’m comparing apples-to-apples procedures. For the dataframe I use in Part 2 of my analysis, I again drop all procedures that are not offered at every hospital. Again, I want my comparison to be apples-to-apples.

Part 1: List vs. Cash vs. Negotiated

Now that my data is prepped, I can calculate the mean and median Negotiated Price vs. Cash Price, Cash Price vs. List Price, and Negotiated Price vs. Cash Price across all procedures, by insurance plan. I then perform the same calculation for just those procedure/plan combinations where the insurance plan has negotiated a rate (in case they don’t negotiate for uncommon procedures, which could just be skewing more meaningful results). I also calculate the percentage of procedures for which each plan has negotiated a rate. I merge all of these results into one dataframe and repeat for both Inpatient and Outpatient procedures. The results are shown below.

INPATIENT RESULTS

The chart above shows how the different insurance plans’ Negotiated Prices in the Inpatient dataset stack up against one another and the Adjusted Cash Price.

  • Negotiated vs. List Mean/Median: We can see that, on average, Metroplus Medicaid and the UHC Community Plan have negotiated the best rates vs. the List Price, followed by the Adjusted Cash Price, then Healthfirst CompleteCare and Medicare AB. When we look at the median, however, only Metroplus Medicaid outperforms the Adjusted Cash Price.
  • Negotiated vs. Cash Mean/Median: When compared head-to-head, only Metroplus outperforms Adjusted Cash Price on average, while Metroplus and UHC (slightly) outperform the Adjusted Cash Price when we look at the median difference.
  • % Negotiated: We can see that all the insurance plans negotiated prices for ~70–80% of procedures.

Above, we dig into the distribution of the data to see if our means/medians might be masking any interesting trends. For each category, we show the full histogram and then a histogram centered only on the range of -100% to +100%, to ignore possible outliers.

  • Negotiated Price vs. List Price (blue charts): While sometimes the Negotiated Price is ABOVE the List Price, the most common difference is 0% (not negotiated). Of the negotiated prices, the bulk seem to fall between -80% and -50%.
  • Adjusted Cash Price vs. List (green charts): The majority of procedures either have a 0% discount or ~-60%.
  • Negotiated Price vs. Adjusted Cash Price (orange charts): There are a fair amount of procedures for which the Negotiated Price is multiples higher than the Adjusted Cash Price (> +100%). However, the majority do seem to fall between -100% and 100%. We see another peak at 0%, likely because there are certain procedures with a cash price equal to the list price, and no negotiated rate. In that situation, they’re all the same price.

I wanted to summarize how each insurance plan performed head to head vs. the Adjusted Cash Price, so I created the table above. Ultimately, Metroplus Medicaid (as expected) has the highest percentage of procedures with a Negotiated Price better than the Adjusted Cash Price (73%) vs. Medicare AB with the lowest (19%).

We know that not all procedures have a Negotiated Price, and this might be because they’re perhaps very uncommon and therefore just noise. So, I checked how each plan performed against the Adjusted Cash Price for only those procedures for which they negotiated a rate. The insurance plans definitely do look better using this metric, with Metroplus Medicaid now outperforming cash 89% of the time, vs. Medicare AB now outperforming 29% of the time.

OUTPATIENT RESULTS

The charts below are identical to the charts in the Inpatient section above, except we are now using the Outpatient dataset (which includes some additional insurance plans).

The chart above shows how the different insurance plans’ Negotiated Prices in the Outpatient dataset stack up against one another and the Adjusted Cash Price. Note that Medicare FFS and the UHC Community Plan do not have any negotiated prices for Outpatient procedures. Consequently, their rices match the List Prices exactly.

  • Negotiated vs. List Mean/Median: We can see that, on average, Aetna has negotiated the best rates vs. the List Price, followed by the Adjusted Cash Price, and then the 1199SEIU Benefit Fund, Metroplus Medicaid, Healthfirst CompleteCare, and Medicare AB. When we look at the median, however, only Metroplus Medicaid outperforms the Adjusted Cash Price.
  • Negotiated vs. Cash Mean/Median: When compared head-to-head, all of the plans’ Negotiated Prices are higher (worse) than the Adjusted Cash Price on average, although when we look at the median difference, Metroplus Medicaid significantly outperforms the Adjusted Cash Price. Aetna and the 1199SEIU Benefit Fund also outperform the Adjusted Cash Price when we look at the median difference.
  • % Negotiated: We can see that while Metroplus, 1199SEIU Benefit Fund, and Aetna have all negotiated prices for nearly every procedure, Healthfirst CompleteCare and Medicare AB have negotiated prices for < 25% of outpatient procedures.

Above, we dig into the distribution of the data to see if our means/medians might be masking any interesting trends. For each category, we show the full histogram and then a histogram centered only on the range of -100% to +100%, to remove possible outliers.

  • Negotiated Price vs. List Price (blue charts): While rarely the Negotiated Price is ABOVE the List Price (first histogram ranges from -1 to +140), the most common difference is 0% (not negotiated). Of the negotiated prices, they are pretty evenly distributed between -10% and -100% (I am not sure why there are a fair number of procedures with $0 Negotiated Prices in the dataset; this is the value coming from the hospital system and I am not sure if it is intentional).
  • Adjusted Cash Price vs. List (green charts): The majority of procedures either have a 0% discount or ~-60% (same as for inpatient procedures).
  • Negotiated Price vs. Adjusted Cash Price (orange charts): There is a small number of procedures for which the Negotiated Price is multiples higher than the Adjusted Cash Price (> +100%). However, the majority seem to fall between -100% and 100%. We see another peak at 0% (same reason as before), but the rest are fairly evenly distributed between -100% and +100%, with a mini peak at ~-20%.

I wanted to summarize how each insurance plan performed head to head vs. the Adjusted Cash Price, so I created the table above. Ultimately, Metroplus Medicaid (as expected) has the highest percentage of procedures with a Negotiated Price better than the Adjusted Cash Price (80%) vs. Medicare AB with the lowest (10%), aside from the UHC Community Plan/Medicaid FFS which negotiated no prices.

Again, we know that not all procedures have a Negotiated Price, and this might be because they’re perhaps very uncommon and therefore just noise. So, we can check how each plan performed against the Adjusted Cash Price for only those procedures for which they negotiated a rate. Some of the insurance plans do look better using this metric, with Medicare AB and HealthFirst CompleteCare (which negotiated prices for < 25% of procedures) shooting up from ~10% to ~70% of the time better than Cash. The stats remain steady for 1199SEIU Benefit Fund, Aetna, and Metroplus Medicaid – which makes sense because they negotiated nearly every procedure.

Part 2: List & Cash Prices Across Hospitals

We now turn to the List Prices and Adjusted Cash Prices across the NYC Public Hospital System. We calculate the mean and median List and Cash Prices for each procedure across all eleven hospitals. We then calculate the difference between these means/medians and the List/Cash Price for each procedure at each hospital, to see how the hospital’s price stacks up against the competition. Since this is all data about the same hospital system, we wouldn’t expect to see massive differences across hospitals.

INPATIENT RESULTS

In the chart above, we plot the mean difference in price by hospital, for inpatient procedures.

  • List Price vs. Mean/Median: There is not much variation in inpatient List Prices across the various hospitals.
  • Cash Price vs. Mean/Median: This is more interesting. It looks like there are 4 hospitals (out of 11) that have much higher Cash Prices than the other hospitals. On average, Coney Island, Elmhurst, Harlem, and Jacobi all have Cash Prices that are 140+% higher than the median Cash Price across the hospital system. When I look at the original datasets from these hospitals, however, I can see that they do not have any Discounted Cash Prices listed. Just List Price and Negotiated Price. Not sure why this is – possibly just a failure to report their Cash Prices?

In the chart above, we plot the median difference in price **** by hospital, for inpatient procedures.

  • List Price vs. Mean/Median: Again, there is not much variation in inpatient List Prices across the various hospitals.
  • Cash Price vs. Mean/Median: Coney Island, Elmhurst, Harlem, and Jacobi are all showing up with much higher Cash Prices vs. the median Cash Price across the hospital system. In this case, the median difference is ~150% for all four hospitals. (Again, this is possibly just a data reporting issue).

To get a better look at how these Cash Prices per procedure are differing across the different hospitals, we create a histogram for each hospital showing the distribution of their Cash Price vs. median Cash Price across the hospital system. Our four expensive hospitals are showing up with similar distributions, that differ pretty significantly from the other seven.

OUTPATIENT RESULTS

The charts below are identical to the charts in the Inpatient section above, except we are now using the Outpatient dataset.

In the chart above, we plot the mean difference in price by hospital, for outpatient procedures.

  • List Price vs. Mean/Median: There is not much variation in outpatient List Prices across the various hospitals.
  • Cash Price vs. Mean/Median: There is also not much variation in outpatient Cash Prices across the various hospitals. (Looks like all hospitals are providing outpatient Discounted Cash Prices).

In the chart above, we plot the median difference in price **** by hospital, for outpatient procedures. Due to the very limited variation, the median difference across all these metrics is zero for every hospital and therefore this chart is blank.

Conclusion

Ultimately, this was a fun exercise but my biggest takeaway is that this is just the beginning. Firstly, it seems like this dataset is missing negotiated rates for many prominent commercial insurance plans available in New York: Empire Blue Cross Blue Shield, Cigna, Emblem Health, UnitedHealthcare, among others. Additionally, this is just one hospital system in just one city. It is probably one of the least expensive systems in the city, and therefore possibly the least interesting. We need this same information for every hospital system (public and private) across the country, and we need it in a format that is easily comparable.

Now that I’m done being a Debbie Downer, what did we learn using this imperfect but still helpful dataset?

Inpatient Highlights

  • The plan with the best rates by far is Metroplus Medicaid. Aside from that, the other plans don’t do too much better than the Cash Price!
  • Since Negotiated Prices are often WORSE than the Cash Price… for anyone with a very high yearly deductible that they don’t think they will meet, what’s the point of that monthly premium when you’d be better off paying cash?
  • When looking across the eleven hospitals in the NYC system, the Cash Prices at Coney Island, Elmhurst, Harlem, and Jacobi are for some reason MUCH higher than the other hospitals’ (because they don’t have Cash Prices!). This could just be a data reporting issue, however.

Outpatient Highlights

  • Metroplus Medicaid has the best rates. The 1199SEIU Benefit Fund and Aetna are somewhat better than cash, and the rest of the plans are either pretty equivalent to, or fairly worse than, the Adjusted Cash Price.
  • Again, it seems important that patients with very high deductibles consider the Cash Price vs. their insurance plan’s Negotiated Price, for certain procedures.
  • When looking across the eleven hospitals in the NYC system, the List and Cash Prices are essentially identical (as expected!).

Thanks for reading, now let’s put pressure on more hospital systems to publish their rates!


Written By

Anne Bode

Towards Data Science is a community publication. Submit your insights to reach our global audience and earn through the TDS Author Payment Program.

Write for TDS

Related Articles