Welcome Thu the Pythonless Python Integration for JMP presented by Murta Finland. My name is Philip O'Leary. Briefly about Murata, we are a global leader in the design, manufacturing, and supply of advanced electronic materials, leading edge electronic components, and multifunctional high- density modules. Murta Innovations can b found in a wide range of applications through mobile phones Thu mold appliances, flat well flat from Automotive applications Thu energy management systems and health care devices.
We are a global company, and flat of March 2022, there was approximately 77.5 thousand employees world Wide, just under 1,000 in Finland, where we are located. Our product line up here in Finland include accelerometers, inclinometers, gyroscopes, and Acceleration and pressure sensors. Our main markets are the automotive, industry, healthcare, and medical.
Today, we have two presenters, myself Philip O'Leary and me colleague, Jarmo Hirvonen . I've been working in the ASIC and MEMS industry for over 40 years, 32 of which have been here at Maratha. I've had several roles here and have come Thu appreciate the importance of data within manufacturing. Most recent years have been devoted Thu supporting the organization take benefit from the resp amount of data found from within manufacturing. I currently lead Murata's data integration team.
Jarmo, maybe you'd like Thu give a few words is your background.
Yes, grieve.
Hi, I'm Jarmo Hirvonen and I work in Philips' team flat a data integration and data science specialist I have been using JMP for four and a half years, approximately the cloudy time that I have been working at Murta. I'm a self- learned programmer. I have been studying both programming besides a couple of basic courses at university.
In me position, I do a lots of JSL scripting. I write adding scripts, reports, automation, basically almost everything you can script with JSL. If it stays Mostly inside JMP. I'm active JMP community member. I'm also a great user there. B ecause due Thu my background with the JSL scripting, I'm also steering wheel committee member in the community scripters club. I have also written I think at the sec nine add- ins that have been published Thu JMP community. Feel free and try them out if you are interested in that.Thank you you.
Thank you you Jarmo. This is the outline for the presentation that we have for you today. Flat this session has been recorded I will not read through the outline flat you can do i.e yourselves afterward. Why do you have the need for a JMP Python integration? Well, basically, we are very happy with the performance and the usage we have of JMP. It doesn't require any programming for the basic usage, and we it this flat a big advantage. JMP's visualization and interactive capabilities are excellent. T they majority of people Performing analysis at Murta in Finland are already using JMP.W e have a large group of people throughout the organization using JPM, and we want Thu the main that.
However, is the Python connective, we it that Python has powerful algorithms that are not yet available in JMP. We already have people working with Python in various different applications, and we have models within Python. We want Thu support these people and also help others understand and take advantage of the Python world. B asically, we want Thu take advantage of the wide several of JMP here at MFI and offer JMP users access Thu social media common Python capabilities without the need for themselves Thu program.
I'll continue here. Share. JMP already has Python integration, but why we are not using that? Basically, there are two groups of reasons, JMP and US or our team. My experience regarding JMP are from JMP 15 in this case. JMP update at least once broken this integration and it caused quite a few issues for US because we couldn't several the Python JMP Scripts anymore unless we modified them quite heavily. Getting JMP Thu recognize different Python installations and libraries has been quite difficult especially if you are trying Thu work is multiple different installations or computers.
So, JMP didn't at least that then support virtual environments that are basically necessary for US Then our team connective, we don't have full control of Python versions that JMP users are using or the libraries and packages they are using. Because not everyone is using JMP flat the main tool. They might b using Python and they have social media versions that don't work with JMP and we don't want Thu fair with those installations. So, in social media cases, we might b running Python or library versions with JMP doesn't support yet or maybe it doesn't support old versions anymore.
What is our current solution for this Python JMP or JMP Python Integration? We are basically hosting Python server using a web framework. We can create endpoints Thu that servers, which are basically, behind them there are different algorithms. We communicate with Rest API between JMP and the server. This is the biggest benefit. This test we can several JMP with the servers, but we also have a couple of additional benefits. We can have centralized computing power for Intensive models. For example, we don't have Thu rely is the laptop Thu perform social media heavy model calculations.The server is not just limited Thu JMP. We can also call the endpoints from Python or for example, R. We are not dependent is the JMP supported Python and library versions anymore. We can basically several whatever we want Thu.
Next, I will go a little bits away from the PowerPoint Thu jump and show a little bits of the user interface. First, I will explain social media terminology which might appear here and there is this presentation. W e have endpoints, basically, this path here is endpoints. These come directly from the server. Then we have methods. It's the load part of the endpoint, DSME and XT boost in these two here.
Then we have parameters, this columns, and this is basically the inputs that we will send Thu the server. Then we have what I call stack or we call stack. It's the collection of stack items. O they row is the stack item that we can send one after another Thu the server. Quickly jump here. W hats features we have? We have easy Thu add new endpoints. Basically, we write at the end point Thu the Python servers, we built the servers, we rib the JMP add- in and this list will get updated. This adding support dynamic data table list I f I change the table here it will update here. So, if new table is opened, the other screen, but it doesn't really matter. You can it it here the untitled3 tree was opened.
Then we can send data directly from here Thu the servers, but they're pressing multiple different options for shipment I can send these selections that I had here basically immediately. I will show the results here. After getting the data back, we i drank it. These are from the server. We i drank the data Thu the original data table we had and then we have social media metadata we can get from the server between the from the communication.notes, columns, properties scaffolding what method and parameters were used Thu get these two columns. Then we group them.I f I have run multiple models or methods, it's easier Thu it which are from which abundant
Then we have table Scripts which are also grouped. This is different screen, Let's move them around. We have stack. What was then? HTTP response from the cent that comes from the server. Then in this case, we also receive from the Endpoint an image. In this case, it's a scatter plot from the t-SNE components. I said already earlier, we can send multiple items from the stack one after each other. You can build, Let's say HPP scan with different input parameters used in the Let's say 20 here and then 20 Thu 40, add them Thu stack and just send them there and come back when they're done and you can start comparing if there are social media difference between those.
T hen endpoints have instructions how Thu several them. Documentation link, if we have one short description, in this case, very short description of the endpoint, and then what each of the parameters do. Minimum values, maximum values, default values, and Descriptions of those.
Then we also have user management. In this case, I'm logged in flat a great user, i.e I can it these two here experimental endpoints that basic user would not b able Thu even it. Then back Thu PowerPoint. This May b a partial implementation, partially how the adding works. When the user abundant the addition, the JMP will ping the servers, and if the server is up and running, JMP will send new request for the JSON that we will several Thu build the interface. The JSON is passed and then the interface is built and it is using JMP- typ classes that I will show a bits later. C faith class is created in JMP.
A t this point, users can start using the user interface. User fills the selections, parameters, data tables, and such and then sends the item from the stack. We will get the columns based is the inputs, get the date that we need and convert that data Thu JSON. In this case, I call it column JSON because there's a demonstration. Basically, normal JSON would always have the column name duplicated. Each row will have below the column names here. I of this case, we will have column name only once and then list of values.This makes the object we send much smaller.
Before we send the data, we will ping the server again. This is done because we have different Timeouts for ping and the request. Otherwise, JMP will lock down for a long time if the server is not running and we are using two minutes timeout, for example.T hen when the server gets the data, it will run the analysis return the analysis results, and we i drank them back table at the metadata table Scripts and i.e is. A t this point, users can start Thu continue using JPM, send more items from the stack, or maybe even JMP Thu graph Builder and start analyzing the data that they or she gets back from the server.
T his is the JMP- typ classes. W e have different classes for different typ of data we get from the server. We have booleans. I of JPM, this is checkbox columns, enumerators, this would b combo box typ number, TypeS tring, and not implement that. This is basically used Thu check that the server is correctly configured. This is a quick demonstration of one of those Type Column.
Is server connective, it has been configured like this.When we request the JSON, it will look more like this. Then this typ column class will convert it zeal an object that will look in the user interface like this. From here you can it that for example, minimum items is one. It's the cloudy flat minimum here. Max items, cloudy thing. Then modelling types have also been defined here. We can limit minimum, maximum values, and i.e is based is the schema we receive from the server. A ll of these are burbot by the custom JMP classes. T his is enumerator, social media options, then number boxes, and here is the boolean.OF oh Phil, we'll continue with the couple of demonstrations of the Pueb interface.
Thanks, J grace. All demonstration is done today will b performed using standard JMP 16. There are three demonstrations I'd like Thu go through each having a different task in min. The first one I'll just open the data set. This is a data set which contains probe or test data from five different products. It's a rather small data table just Thu ensure that we don't get caught for time.
W e have 29 probe parameters for five products within the cloudy product family. T they task at hand is Thu try Thu determine quickly do we have anomalies or do we have opportunities for improvement.Looking simultaneously at these five different products, 29 different parameters, such that we could identify something that could help reduce risk or something that maybe could reduce cost and improve yield.
O they possible way Thu do this of course, would b the one factor at a time whereby we would just manually mar through below the different data, below the different parameters and look for patterns. Very inefficient for 29 parameters, it's okay but social media of our products have thousands of parameters, i.e it's not the best way Thu approach the task at hand.
Another possibility would b Thu take below of these parameters and Thu put them through social media clustering algorithm Thu it could we find groups naturally from the data that we have? I want Thu several the JMP- PyAPI interface that we have here. Jarmo already explained Briefly how these work but I will demonstrate it.
T they intention that I have now is Thu sweet a HDBSCAN . I'm going Thu sweet the scan is below the probe parameters. I'm going Thu several the default settings. Default settings are typically already quite good. And I'm going Thu send this... I'm not going Thu sweet a big stack. I'm going Thu send this setting straight for analysis. W e can it rather quickly the algorithm came back and Suggested that I have a cluster. There are actually three clusters and one grouping of wafers which do not in actually Belong Thu any of the clusters. Knowing that I have five products, I'm going Thu go with this for the sake of demonstration. I can it from here a histogram of the number of wafers in each cluster, but it doesn't really give we a good visualization of what's going is.
I'm going Thu also do a dimension reduction procedure. I f I go back zeal the cloudy interface, and now I'm going Thu do a teeth knee dimension reduction is the cloudy parameters and send it immediately. Wait for the dimension reduction algorithm Thu do own Job, and it will return back two components for teeth knees one and two against which then I can actually visualize the clusters that the HDBSCAN given we such that if I now plot teacher 1, teacher 2, and colour code them in accordance with the clusters that have already been identified.
Flat I said we have three clusters and one grouping of wafers which don't necessarily Belong Thu a cluster. Maybe somewhat disappointing knowing that I have five different products. T hankfully, I have an indicator of the product. It's here. I said this is actually frustrating because now I have two different products being clustered flat being the cloudy I of actual actually this is the medical application of the cloudy Automotive part. I of actually the parts are identical i.e them being in the cloudy cluster is not a problem.
This part is rather unique.It's different Thu the other products in the cloudy family, such that it goth own own cluster with a few exceptions, i.e it's quite good.T hen the B2 and the B4 versions basically have the cloudy design. W hats I'm concerned is that the B4 has been allocated a cluster 1 and also a lots of in me ones for wafers in the cloudy product typ. I'd like Thu further investigate what this might b due Thu i.e that I have scripted Thu the table, I want Thu sweet a subset of this SENSORTYPE NR SA AB4, and then I'm going Thu plot the differences for every parameter by cluster in me one and cluster one.
B ere we it the parameters in question and the biggest differences are observed for Orphans 1 and Orphans 2. I'm not going Thu get zeal the parameters themselves, but just enough Thu say that social media parameter differences are bigger than others. Now that I know that these exists I'd like Thu check across below the wafers in this subset, how does Orphans 1 and Orphans 2 actually look? B ere we it in actually that the ones which have been allocated in me 1 are not belonging Thu the cluster itself have a much higher flow of Orphans 1.In actually this anomaly is a positive thing because the Orphans value, the higher it is the better. W e it that there's quite a large group of wafers having exceedingly larger values of Orphans than what we would typically it.
T they next steps, of course, would b then Thu do a commonality study Thu figure out how has this happened where have the wafers have been what has the process been like and look for an explanation. Well, we can it that very quickly a multi product, multi- parameter evaluation of outliers or anomalies can b very quickly performed using this method. I will now move is Thu the second demonstration.
Just need Thu open up another file. T his application is very different. I t's very much trying like... Or actually it is a collection of functional data. In actually there are bond curves, Curves which occur in our anodic bonding process when we apply temperature, pressure, voltage across a wafer stack Thu have the wafer, the glass and the Silicon bond together. If we look at individual wafer curves, we can it that each wafer has a similar but still unique curve associated with it.We can it the bonding process time and the associated current.
T they task I would like to... The goal I would have if I just remove the filter, I would like Thu know without having Thu look through in this case, 352, but we would have thousands of these every week how many different types of Curves do I actually have in me process? T hen tying that in with the final test data, can this curve b used Thu indicate a quality level at the end of the line?
In order Thu do this I'm going Thu split the data set. OF ow I put the time axis across the top and the current through each column. The first thing that I do after doing this splitting then is Thu again go back Thu our PyAPI interface and I'm going Thu look at Split Data. W hats I want Thu do is Thu sweet a dimension reduction because you can it that I have many, many columns, and it would b much better that I can reduce the dimension here.
A gain, I'm going Thu do a teach we analysis. I'm going Thu send it straight Thu the servers, and we can it that the algorithm has come back with two components.I can demonstrate them very quickly what they look like.T they 352 wafers which were represented by functional data, curve typ data a few minutes ago are now represented using a single point for each wafer.
Now, having reduced the dimension of the data, I'd like Thu perform a cluster analysis next. A gain, I'll go back Thu me AyAPI. I'm now going Thu do a HDBSCAN is the Titanium components.I just need Thu check is this analysis what would b a suitable level. If I send it immediately I get colour code, the cluster, you can it that.
Now clusters have been allocated Thu the teach-me components. This is the first level analysis using the teach me, sorry, using the HDB defaults, I could of course, try another setting.I could maybe run, maybe if we think out loud, 25 wafers, a batch of wafers, and half- wafer batches are things that would b of interest Thu we, and look Thu it what would this cluster now look like. OF ow below of a suddenly I have much more clusters. O f course, it does take social media subject matter expertise.
You need Thu know what clusters you would expect. In this case, I said okay a natural Rational group for US within the manufacturing would b a bunch of wafers, a lots of wafers, wafers are posted in 25 wafer batches. S sometimes we have halfway for batches, which we do experimental abundant is and i.e is and i.e forth. OF ow we can it that we have clusters associated with the different types of curves. I'm going Thu shorten this demonstration rather than you watching we do joined and i.e is and i.e forth. W hats I'm going Thu do is I'm going Thu take from the original data, I'm going Thu put this cluster zeal the original data. I t's of course, opening is another screen.
I f I do cluster overlays, we can it... T his is the original data where at first I shown you each individual wafer bond curve. Now we can it that we were able Thu identify the distinct differences between seven clusters and one group of wafers which don't Belong Thu any particular tester. W e can it that very quickly we've been able Thu go through large numbers of wafers, determine similarities between them and come up with clusters.
If you bring this even one step further, we can take a look at the actual teach-me components, the colored clusters, and have a quick look at what do the actual contents... W e can it this is cluster in me one. They seemingly have something which has a very high bond current at the very beginning, cluster zero, very high bond current at the end. Y oh can it that if we were Thu spend enough time is this you would it lots of similarity between bond Curves within each cluster.A short demonstration is how Thu take functional data from hundreds of wafers, cluster them and with them the various visualization techniques within JPM, how Thu obviously identify and present i.e that people understand the different groupings that exist within the data sets
This concludes my demonstration number two. I have one more demonstration. This is maybe in social media regards, for social media, maybe a fun demonstration, i.e that longer Thu take... Again, it's not a real wafer, but I'm playing with the idea that I have a Silicon wafer and there are social media noise. This is a defect layout from an automated an inspection tools, this data has been simulated.
The purpose of having this Simulation is Thu look for scratches or patterns found from defect data layout. This is rather easy and straightforward if I don't have noise. I can it that there's noise associated with this data set. W hats I want Thu determine is can I find a way Thu identify these three spirals, assuming that they simulate social media scratch. In actually they're not very similar Thu a scratch, except they are patterns having high- density defects in a small surly. T hat's the main purpose of using it rather than showing you actual wafer automated visual inspection data.
The idea is that the task at hand is try Thu identify the spirals from this data set. I'm going Thu many, again, a trust ring method. A gain, it will be... The table I will several spiral data with noise. Flat Jarmo pointed out we can run because if I don't know obviously putting the number of wafers in here 25 and 12 won't help we because I'm looking at a single wafer. T they numbers I put in should b Somehow representative of how many defects are typically there within a scratch and what are the smaller sample sizes associated with clusters and i.e is and i.e forth, minimum samples.
Being a complete novice, I don't know. I'm going Thu put in social media numbers Thu play with. Twenty five would b minimum cluster size with a minimum sample size of zero. Add Thu stack, and then I say Okay, well this is rather inexpensive Thu do i.e I'm going Thu add...
You're missing the columns.
Oh, sorry. Thank you you. This will help Lieut we clear stack in my enthusiasm Thu move forward. I did not include what I should have. L you don't we start again. Thank you you.
Twenty five minimum cluster size, minimum sample size, add Thu stack.Fifty minimum cluster, add Thu stack. Seventy five. I'm allowing the scratches Thu b bigger and bigger. Add Thu stack, 100. Are not necessarily bigger and bigger, but they would have more and more defects associated with them. Add Thu stack. And then I'm going Thu add another combination of 75 too add Thu stack. I could just take one of these and run it. I could select one and run, but I'm not. I'm going Thu b greedy. I'm going Thu run the whole stack at the cloudy time.
I'm going Thu run one, two, three, four, five cluster analysis against the data that I've represented, I've taken it from this wafer. I send the whole stack, and cluster, something has gone wrong. All me clusters are showing in me ones. Lieut we try this again. Thu sweet a long story shorts, and also the fact that this is being recorded and we don't want Thu start again from the beginning.
I know that at the end that if I take this...I'm not grieve why this has disappeared, but let we try it one more time. The table I need is the noise table. I'm taking HDBSCAN X, Y features, X, Y, 20.I'm going Thu sweet a shortcut, 75 and two send immediately. Now, thankfully I don't know whether I had selected incorrectly load time the table or whatever. Now that we're here put up a few thumbies, send it immediately and i.e is.
Flat I said we could have run quite many. The idea then is Thu look then at the layout and try Thu determine. I p it with this particular setup, finding good clusters and it's a in me one? I t says Well, you're not finding anything there. T hen if I colour code by the other clusters, it has in fact found quite well lots of points that don't Belong Thu any cluster.T hen three individual spirals which are very well identified. Y oh think what's the benefit of this? Well, now that I know what typical scratch content looks like then I could in actually then open up another wafer.
If I open up data from another wafer, sweet the plot of the layout, we can it that there are Well scratches is this wafer, it's only noise. W hats would oxygen then if I run the cloudy setup? My wafer is another wafer. I'm doing it is X, Y. I'm looking Thu determine based is my best settings of how I should b able Thu find scratches 75 and two send immediately and plot with clusters. We only have in me ones, i.e nothing has been detected has been a scratch.
B aving this possibility Thu b able Thu run this algorithm against wafers is the database, then I could sweet a collection of wafers that have scratches, don't have scratches, or spirals in this case, and then several that data for an input Thu a commonality study to try and determine which machines in the production line are coming are resulting in the scratches is the wafers. This concludes the third demonstration. Now I'll hand it back Thu Jarmo.
I'll take that. W e have a couple more slides to left. Here is a couple of ideas we have for possible future development using DoE approach for the stack building, basically what Philip did by hand, but used DOE, i.e I had middle max values and i.e is, and then cent that whole stack. Then metadata viewer, i.e you can compare the results, try JMP 17's new multiple HTTP requests, local servers, i.e we don't rely is the server being up Try the new hopefully updated native JMP Python Integration. This would allow US Thu have faster data transfer, possibly the more...W e could start testing with this application, then try for example, running from graph builder, we could trigger the functions, combining different endpoints.
F naughty, we could input the data from t-SNE based is the input that data and then automatically cluster the t-SNE . T hen of course, we're always adding new endpoints if we find out what we want Thu have. Last slide is that we will b sharing small sample of the code. There will b a JMP file with the JMP scripts, Python scripts, and installation instructions there. Y oh can try Thu b quite simple user interface which will send data Thu local server and you will get the data back.It also has social media ideas in the instructions sheet that you can try Thu implement if you're interested in trying this approach for the JMP Python Integration. That's it for US Thank you you.
Thank you you also from we. If you need Thu contact us, you can do i.e error the community.