Rio Tinto's copper, gold, molybdenum, and silver mine (formerly known as the Kennecott Utah Copper Mine) just outside of Salt Lake City has been in operation for more than 120 years. The metals produced are mined and then concentrated from <1% to >99% purity through drilling, blasting, milling, froth flotation, smelting, and electrorefining. This concentration process results in throwing away about 10% of the mined metal. A 1% increase in metal production can mean as much as $20M per year in added revenue, so every incremental improvement must be defined, measured, analyzed, and controlled. JMP statistical software has been instrumental in key decisions that influence production.
This presentation and JMP demonstration shows how we arrived at some major decisions by creating a linear regression to identify key factors and quanitify their impacts on recovery and quality. Some of these decisions include purchasing $1M worth of added equipment, spending $1M to maintain old equipment, and switching to a more expensive reagent, costing $3M/year.
JMP has also been used to find the best molybdenum plant configuration, as well as to quantify the impact of various changes to grinding methods to maximize throughput. Using JMP, we show how key decisions were made in these processes as well.

Hey. Hello. My name is Joey Mortensen. I work for Rio Tinto as a global mining company. I'm stationed at their Utah Copper mine called Kennecott. I'm going to share several examples of how the Fit Model feature at JMP has been used… How I've used it to help our company make some key decisions to maximize recovery throughput and overall revenue.
Let's give you a little overview of how I'll go about this demo. First, really brief how Kennecott works to non-miners. Then the three claims I need to vet using the stat software. Why I use the Fit Model or the importance of normalizing or leveling the playfield to make it a fair comparison. The idea of being a data janitor just as much as a data scientist. Then I'm going to go into my demos and maybe go in and out of JMP and back to this presentation, depending on my time.
First, Kennecott. This is an aerial view of Kennecott. All the material off to the side of this pit, which has been open for a little over 120 years, is what didn't make the cut to go to the mill or concentrator. But you can see we made almost our own mountain in the last 120 years at Kennecott in the Rocky Mountains.
What is considered ore or waste depends on how much copper, molybdenite—which I'll call moly a lot in this presentation—gold or silver, how much content there is to begin with. If it does make the cut, that drill and blast and then shovel and haul truck the material over to a crusher and send it down a conveyor belt that's just off this screen to the concentrator, where our case studies will take place.
Concentrator, the reason it's called that is because not only do you mill the ore to a fine powder and where throughput is the goal, but the next goal is to concentrate the ore to send to a smelter. You go from about 0.5% copper to 25% copper. You also go from about 0.04% molybdenite to 85%. You're concentrating that 2,000 times its original concentration.
You lose a lot in the process. Here's the opportunities for improvement, and here's where all the vendors come in and talk to me and my colleagues about how much their particular product is going to help us and how we need to use stat software to vet that in those claims.
Further down the process, we have a smelter in a refinery, but I don't want to distract you too much by that. Let's go to these claims. First on the throughput claim. The claim is if we insert new grates and/or liners, we'll increase the throughput by 5%. That's really important to us. That's worth $100 million a year, so we got to really make sure that's true. How do they figure? They've used some software themselves, some more mining-based software to prove that claim, and we're going to test it in our plant.
One grate set, which is replaced every 6 months in just one line of our four lines, that's the equivalent of $1 million. Two times a year, four lines, that's $8 million if we were to switch companies to a different grate and liner or distributor. It's big claims we need to bet.
Moving to flotation. After we've ground the ore and we send it to flotation to separate the minerals, there's a claim that if I use chemical X or widget Y, we could increase the recovery by 1%, or the lab tests have shown even as high as 5%. But we're looking for that at least 1% to say it's real and also it's worth the cost of an extra chemical, because an extra chemical could cost $10 million a year, 1% is worth $20 million. It's close sometimes.
Then finally, the last case study I'm going to show you is just there's always this battle between back in my day, my configuration in the moly plant was better than the configuration you're using now. When you're trying to concentrate moly that much, there's six different ways you can do it. It's like a Dr. Seuss drawing, really, if you were there, if I take it to the plant. Many different circuits you can use and interchange and do this one first and that one another time. That's important: to figure out what is the best configuration. It's worth also millions of dollars a year.
Why I use the Fit Model? Well, you really got to normalize everything. Many would say Floyd Mayweather was the best boxer of all time. He's never lost. There's a lot of boxers that have similar records. But what's more important is it's not like he'd ever box Mike Tyson. They're completely different weight classes, and it wouldn't be fair or that interesting. You wouldn't want to make that an open lead.
What makes things interesting is parody and in this particular weight class. You also classify sports by gender. Of course, you've maybe heard of those cases where they box chimpanzees and humans once a year or something at a carnival. That's not fair, right? They're not even close. You got to normalize for the right classes.
Here's examples in the case studies you're going to see. Normalizing for hardness in a throughput model. We have 50 different ore types that we've classified and done tests on. Because, one, if you're trialing a liner set, and you get a really soft ore, you're going to look like a really the better liner set. But that's not true. That's just because you got a softer ore.
In the recovery model, if I get a much higher head grade feeding the flotation plant during the trial, it's going to make it look like this particular chemical is way better than it really is. The head grade and even grind size and other factors—and I'll get into each factor that we normalize for—influence the overall result. We need to lay bare the influence of just the chemical X or widget Y.
Also, the same thing needs to be done for this moly plant configuration. It's not just the configuration, but there's other factors to make the best configuration stand out amongst all the other things that could be influencing the recovery of the moly.
One last disclaimer before I go into the demos is that there's two ways to clean data. You can use local data filter in JMP, and you're going to see me do that a ton, actually. I love the local data filter because sometimes you forget to filter stuff beforehand. Then you can filter stuff beforehand, too, which also saves you, especially if you're going to do this over and over again. You want to filter it beforehand.
But also, I'm going to introduce you to something called a met table, a metallurgical table, because my background is actually metallurgical engineering, and how you also can make your response something that makes more sense prior to your making of a model.
One last thing is that one quick story. We tried to make a machine learning model for 4 years with data scientists, but the marriage between engineering and data science didn't work, mainly because oftentimes you just have to accept that you don't have the right data that you need. You don't have enough good data to make a model like that, and especially when we were trying to use 20 minutes snapshots on on-stream analyzer.
It's better to just start here with this Fit Model feature that isn't as fancy as that, but at least is interpretable and isn't at the mercy of bad data because it's in real-time and I can clean it, and it's at the level that the data can be trusted.
First, maximizing throughput. The goal is to get the highest tons milled per hour, but it's really to beat the met table. This is a snapshot of our met table. Here's a bunch of different work types and their throughput rates that are expected based on lab tests. These are like weight classes in boxing, again. My response is going to be performance against met table, not overall performance, because there's huge swings between this MZ1H is very slow or very hard. Then you can see you can get It's something that's almost double the throughput if it's a very soft door.
Then, of course, we want to normalize for how hard we're even trying. Sometimes we're not the bottleneck at the mills. These mills are waiting on the mine upstream, so they will slow down on purpose to maximize recovery. But here's SAG 1, SAG 2, SAG 3, and SAG 4. When I say SAG, it means semi-autogenous grinding. I don't want to take you to a mineral processing one course, but just for terminology, when I show you the data set, that's what SAG will mean.
Now, I'm going to go to my data set here. Here, find out my real… Real quick. Find the data set if I can. Move it over here. First data set is throughput here. This is monthly data. The reason it's monthly is another important filtering feature is that the mind delivers to a stockpile, and a stockpile is huge. One or type does not go through the same day or not necessarily all of it go through the same day it's delivered.
The fairest way to make sure that you're not comparing apples to oranges is to make a large enough data set that it captures the variability just in the inputs. I'm going to go to Analyze, I'm going to go to Fit Model. I'm going to the percent of met table performance of SAG 1. I already have an idea that the Liner Life, the beginning and end of the life, needs to be normalized for. One more factor I hadn't mentioned yet.
How hard we're trying or how hard against the motor constraints we're running. The grates, whether they use big or large grates, our biggest that we're doing right now. Then also there's a supplemental crushing circuit, and whether it's on or off or what percent of the time it's on may matter. All these factors, I think, are the ones that matter.
I'm going to hit Run. Using the default settings for all the model features. Then I start here and say, "Well, does this make sense to me?" It does. I'm a little shocked that my pebble crusher doesn't make a difference, but it is what it is. I remove it because the chance of it making a difference is saying it's 1% from this effect summary. I remove it. Now I have things that are passing the test, but it's close. I have a pretty good summary of fit, an RSquare to 0.53. The linear life is the only thing that might not have a true probability, but it's close.
I'm going to say, "I want to look at this data even further." I'm going to Least Squares Means Plot. This gives me a really good indication that, okay, big versus small, 88% of met table if I use small grades and over 100%. I beat met table if I move to these big grades, 12% improvement and throughput. But I got to vet that and see, does it truly do that all the time? Let's check.
There we go. Back here. I'm going to go back and say, "This is line 1." I've already pre-made the other ones just for the sake of demo time. This is what line 2 looked like. It also didn't have pebble crusher make the cut. The other factors did. But big versus small doesn't make a big difference on SAG 2. Why is that? Well, luckily, I have this data set that's telling me, well, there's only 3 months worth of data here compared to 45 other months where you're using small grades. It's just too early in the test to really hang your hat on it.
Another thing that I'm introducing for the first time is the local data filter on the left. Here, you might picture if you're an engineer, let's have a team of engineers that are making this decision, whether to change grate sizes. You're all going to be looking at this JMP output and say, "Well, let's throw in a different filter, and everyone can decide what's fair." Because a lot of the time, these calculations, after the fact that people will complain about you not accounting for this, that, or the other. This is a particular 3 months where people would say, "I don't think you should include those 3 months because we were struggling for spare motors, and it's not a fair comparison." That's one way you could filter it.
Another way you could filter that same data set is to use categories of whether you're during motor issues and just filter that out. I put the inverse of that. I'm taking out anything that was months where we were having motor troubles. This is output of line 3, and now we see the line of life matters even less. I would remove that. I only left it in to show that it doesn't make a difference. But the crusher run time really does make a difference, and it would probably make a bigger difference once I remove the liner life as a factor.
How much of a difference? Well, for some reason on this line, pebble crusher matters 16%, so 16% improvement against met table if it's 100% on versus 0% on. Then, of course, the big and small grate change, one of the biggest decisions we wanted to make, we're looking at 14% improvement in throughput. That's huge. It's like we're pretty sure SAG 2 will show the same thing and we should move forward.
Next, SAG 4, we didn't do a big small grate test with this data set yet. We had only been trialing it on SAG 1 and 3 and hadn't moved it. We were just putting it in SAG 2, and we're not ready to move it to line 4 because line 4, we discovered it is a completely different beast. Power hardly matters to SAG 4. It's much bigger wrap around motor, and it seems to be the most sensitive to pebble crusher, even more than SAG 3. Much so that you're looking at improvement in throughput by keeping the pebble crusher running.
This makes us do more studies around why is line 4 so much different than line 1 through 3? The factors that influence its throughput behave so much differently than line 1 through 3. So we need to do more investigation on the fundamentals of that mill, which we had undertaken, slowing the mill down, a lot of tests that way. But this prompts us to look deeper one just because of the output that we see.
One final grinding demo, and then I'm going to move to the recovery. One vendor versus another vendor. The best way to do the same liner set—no change in size, but just different liners—is to do a paired test. All tests that can be highly improved if you use paired testing. If you have a circuit that's identical to another circuit, then you could do, in this case, SAG 1 versus SAG 3 before and after putting an ME liner in SAG 3 versus a vega liner.
Factors that matter is how hard you're trying on SAG 1 and how hard you're trying on SAG 3 or how much you run to the equipment constraint. The pebble crusher run time we know matters because it matters to SAG 3, not so much to SAG 1. Then the SAG 3 liner type here, it's just enough to say it's probably something here. You went from 3% less than SAG 1 to almost 6% more than SAG 1 in performance. That difference is a 9%, improvement in throughput, enough to say, "Well, we should probably trial another liner set made by ME."
I also mentioned a power test here. One thing you can also do in the Least Squares Means Plot is do a power test to see is it really real? You just run power test, and it will tell you, "0.8 or higher is for sure not a false positive. If it's less than that, you may be just seeing a false positive. You want to do further testing before you, for sure, count your chickens, I guess, before they hatch."
Now we're moving to a copper recovery. Now we're talking about widget X and chemical Y. What recovery means is how much copper we fed to the mill minus how much we had to tail out when we concentrated the ore. Let's go to the demo. Actually, sorry, that's the finished product. I'm going to go find it over here. Here's the data set. Excuse me. Oh, here it is.
Here's the data set. This is shift data because we have reliable shift data for each one of these. The variability is captured every 20 minutes of samples taken of your feed, your tail, your concentrate streams to calculate what your recovery was as well as what your grind size, how much was feeding it, the head grade, the non-sulfur copper or the unrecoverable copper, how much copper collector and moly collector you use, how much cyanide you use: all of these important factors.
I'm going to Fit Model. I'm going to talk about… These are two chemicals: 5160, Mo120. Those need to be important. These are two widgets, actually. This is called froth crowders, but it's also froth crowders and magnets together. We installed them as one package. These are the incumbent or trialed things.
I need a normalized for head grade and grind size. It's not fair if it's really coarse or fine material in one test versus another. That needs to be part of the test. Actual copper recovery is what I'm most interested in. The non-sulfur copper is another factor I need to account for. If it's been oxidized, it won't flow. If you have a variability there, you need to account for it.
How much cyanide we use might affect recovery. We weren't sure at the time, but we ended up finding some surprising results there. How many tons per hour per row also matter. This is a decision point that's important. The rest of this is variations on a theme and are ways I've classified it for further testing. But for the point in the case study I'm making now, I'm just going to add one more. I'm pretty sure these are going to be the ones that make a difference.
Let's hit Run. We don't have a grate model yet. It's pretty good, though, but I'm going to do local data filter and make it much better. Actual copper recovery. What I find here is I got a lot of outlier gobbledygook data that I could clean up just right now by saying, "I'm not interested in anything that's less than 80% recovery because something bad went down with the plant." Maybe we lost air. This is a froth flotation where we create bubbles that attach to the mineral that we want to recover. It's a very delicate balance. Oftentimes, you can just have things that are beyond your control and beyond the factors that you can control.
Froth crowders. I was expecting a lot better there. Well, what's happening? I'm going to look here and say, "Well, what's the distribution here of froth crowders?" What's going on? 1100% installed is impossible. I know that you can only be zero to 25% installed. This would prompt me to go back to the data and say, "I probably did one of those Excel errors where you just scroll down 10 days, and it includes 10 days of gobbledygook."
Once I do that, froth crowders do make a difference now. A few other factors. Because I'm a process engineer, I know how to clean the data a lot better, too. I'm looking at Mo120 here. From my parameter estimates, I see three different statuFses. In Mo120, you have Int. Int is not a status I'm interested in. I'm interested in if the chemical is on or off, not in the interim period of on or off.
I'm still not completely done. Tons per hour per row, I'm looking at. I know this is gobbledygook data. I want 500 to 2,500. That's the lowest you can actually feed a row and have it control. This is the most you can feed a row and have it still control. That's a 2,000 tons per hour swing.
You can still run those rows at that biggest swing. But what happens if you do? I'm going to go to parameter estimates, and this is going to tell me what I need to know. That's what's so great also about the Fit Model feature, is that it's interpretable. I can lay bare what the problem is or the impact of all of these and quantify them in a very interpretable way.
Mo120, whether it's on or off, is either you lose 0.5% or you gain 0.5%, that's a 1% improvement. This chemical is a 1.3% improvement. Whether you're running froth crowders or not is a 0.7% improvement. Copper head gray is a normalizing factor. The difference between a 0.5 and a 0.6 is a 1% recovery difference, and our range is usually 0.4 to 1% copper. Obviously, we were right to normalize for copper head grade.
Grind size, you can have 0 to 20% plus 50 mesh, or in other words, the amount of 400 micron material or higher. The 0, 20 swing is between zero losses due to grind size and up to 20 times 0.4, 3.2% losses. I hope I did the math there right. 28% losses, excuse me.
Non-sulfur copper. I actually see I could balance this better. There's some I add data there. My model might be even better if I say, "Well, 0.3 is not real. I know the 0.03 is the max. That's the range that makes sense." What's great about this is it gives you ranges. It shows you where your data is sitting. I still have 2,300 matching rows in my data set of the 2,600 I started with. It tells me also how many data points I've filtered out, which is really important to know.
Moving down the row, what else it tells me is, yes, how much unrecoverable copper is important. I need to balance for that. I also need to look at cyanide and say, "Wow, I can use 0-20 grams per ton of cyanide." Again, 20 times 0.2, that's going to be 4% loss in recovery if I max out cyanide. Maybe I need to limit it to 5 grams per ton and see if I can still get the quality I need because this is more of a quality chemical. The rest are recovery-based chemicals and limit the amount of quality I get to save recovery.
The residence time influence, this looks like a very non-significant factor, but you got to realize the units you're multiplying by as well. That's one of the most important things. The difference between 500 and 2,500, again, is 2,000 tons. 2,000 times 0.001 is the difference between 2% recovery loss or 0% recovery loss.
Then the percent of cascade is the amount of time you're running a process control logic that maximizes recovery. 100 times this is 0.5%. Running this control logic is proven to improve your recovery by 0.5%. That's not a lot. It's the smallest of all of these factors. However, it's the most free of all of these, right?
All these other things cost money in some way or another. Some of these chemicals cost $4 million a year, so it's really important to know if they save you 1%, which is $20 million a year, it's worth it. But if it didn't, you wouldn't want to use it. You want to do some more test work.
I've got one more test to vet here, which is moly plant. I'm going to go right to my moly plant data set and explain here that we have a lot of different choices in the moly plant. But the biggest thing I want to show you is 3-month rolling average is the way to make this work. That seems unfair or weird. But the response or the lag time in the moly plant is so huge that that's why it's so debatable.
When you're in the moly plant, people would say that it's safer to talk about religion or politics than what configuration to run. It's a heavy subject, and it's because it's hard to see the impact of one versus another, so speculation abounds. For that reason, I would go to a Fit Model. I use a data set that's using over 10 years of data. I can either use the met table recovered, or I could use a moly tail.
Let me just go straight back to the… Of course, this is what I do. I'd say, "Is it a moly tail?" The best use is it… Of all the configurations, what is best? Feed grade, this is actually the feed grade in the moly plant, which is the con grade in the plant prior that I was talking about. How many tons are coming through, the moly final con grade. Let's start there because I know that's where I'm going to be heading.
Then I go into the filters. Again, I want you to picture, if you're an engineer, 10 other engineers with you vetting how you're filtering this data to make sure it's fair. First off the bat, a moly tail response. Again, I could have used table recovery and it's its own recovery model, but I chose moly tail as a response because it's cleaner. I would vet that if I had time to show you the two different models and why one is cleaner versus the other. But the RSquare that I'm about to get is about 0.7. I'll show you why.
I'm not interested in a moly tail that's greater than 1.2 because we actually would have recycled that and caught it and ran it back through the system. That would have been a plant upset. Anything higher than 1.2 is definitely a plant upset and not something that you're seriously considering, or you bypass the moly plant. Sometimes the moly price, instead of $20 a pound like it is today, it's $5, and you're not even running seriously. You're also not taking a plant seriously if you're getting less than 1.2 feed grade, so you want to filter I'm going to filter out too small feed grade or too small tail grade.
Now, I'm already at 0.64. What else would I want to filter for is, I mentioned as my big normalizing factor, one of the most important fair to make a comparison fair is, well, what grade are you actually shooting for in the moly plant? In this case, we can't sell any moly at our plant unless it's 45% or higher. Because I'm filtering out this giant section, now I've got about a 0.7 Rsquared model, and all these factors matter.
More importantly, I'm going to go to the Least Squares Means Plot and really lay bare the last three configurations in this model are far superior to the first three. Each one of these configurations for sure has had their fair shake as well. They've all had about 10 months worth because this is a… Actually, it looks like 136 months of the maybe 170 months total data set have been used to make this model.
There's a lot of data here and enough to say that you're safe to assume that these configurations do make an appreciable difference in how much you lose in moly every day. The reason I also picked tail grade as a better response is it's more interpretable from a marketing standpoint because I can make the dollars and cents claim here when the math is cleaner to say, "I know that the difference between 0.6 or 0.5 and 0.9, or a 0.1 difference in tail grade is about $40,000 a day, which is the cost to run the plant every day." The difference between this one and this one is about $160,000 a day.
A huge impact, especially when someone may have enough votes, if no one is any of the wiser to go back to this configuration. Unless you, as a process engineer, can use the data science to prove, you don't want to go back to this configuration. It was far inferior to the last three configurations in this table.
I hope everyone enjoyed this. I hope you guys got something out of it, and you can use this in your daily walk of life with JMP. Happy JMPing and happy trails to all of you. I think I'll end it there. I'm almost sure I must have run out of time by now. But thank you.
Presenter
Skill level
- Beginner
- Intermediate
- Advanced