Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Only show relevant columns in experiments table #1994

Closed
dberenbaum opened this issue Jul 6, 2022 · 24 comments · Fixed by #4402
Closed

Only show relevant columns in experiments table #1994

dberenbaum opened this issue Jul 6, 2022 · 24 comments · Fixed by #4402
Assignees
Labels
A: experiments Area: experiments table webview and everything related priority-p2 Future feature, less priority for now

Comments

@dberenbaum
Copy link
Contributor

Similar to dvc exp show --only-changed, the experiments table should be able to show (either by default or through some option) only the columns where there are differences between experiments.

@shcheklein shcheklein added the 🎨 design Needs design input or is being actively worked on label Jul 7, 2022
@shcheklein shcheklein added A: experiments Area: experiments table webview and everything related priority-p2 Future feature, less priority for now labels Jul 7, 2022
@maxagin
Copy link
Contributor

maxagin commented Jul 7, 2022

Thank you @dberenbaum for bringing this in, I am working on a few new concepts and this may help me to have a better story and more convenient workflow.

I am sharing the ideas. Let's discuss it friendly, please :)

Only show relevant columns in experiments table

Screen Shot 2022-07-06 at 11 22 29 PM

+ and collapse rows without changes

Screen Shot 2022-07-06 at 11 22 45 PM

or if it's not important to show hidden expS in between

Screen Shot 2022-07-07 at 1 50 20 AM

@dberenbaum
Copy link
Contributor Author

Thanks @maxagin! I worry those are a bit too specific and inflexible regarding hiding/unhiding only one of rows/columns. Comparing to Studio, they hide rows by default and provide an option to expand to show all, right? I think this could be a sensible default (and probably one we should consider in the CLI also).

The default table could hide redundant columns and rows and provide options to:

  1. Show all columns (whether hidden by default or by manual filtering).
  2. Show all rows (whether hidden by default or manual filtering).

What is the way to unhide columns now? I can't seem to find it.

@maxagin
Copy link
Contributor

maxagin commented Jul 7, 2022

Comparing to Studio, they hide rows by default and provide an option to expand to show all, right?

and

I think this could be a sensible default

@dberenbaum, you will need to run some exps before having information in the table and plots. No?
Run exps -> See result -> Adjust interface
Your needs are changing with the amount of exps you have run. Meaning more exps you have better filtering options you will need.

What is the way to unhide columns now? I can't seem to find it.

At the GUI level is at the sidebar/columns

Show all columns (whether hidden by default or by manual filtering).

I do not think we have “unhide all”

Thanks max! I worry those are a bit too specific and inflexible regarding hiding/unhiding only one of rows/columns.

We already providing tools, filters and sorts. What you had mentioned in the current situation is a very specific option to my mind. Not sure, please correct me if I am wrong.

regarding hiding/unhiding only one of rows/columns.

The concept describes the situation when you will hide (unhide) all the rows and columns that were not changed. Conceptually this is a toggle.

@dberenbaum
Copy link
Contributor Author

Sorry @maxagin, I misunderstood your diagrams.

Your needs are changing with the amount of exps you have run. Meaning more exps you have better filtering options you will need.

Good point, what is "redundant" will change over time since the table is dynamically updated, so it won't make sense to have this option always "on" by default.

regarding hiding/unhiding only one of rows/columns.

The concept describes the situation when you will hide (unhide) all the rows and columns that were not changed. Conceptually this is a toggle.

Yup, makes sense.

Thanks max! I worry those are a bit too specific and inflexible regarding hiding/unhiding only one of rows/columns.

We already providing tools, filters and sorts. What you had mentioned in the current situation is a very specific option to my mind. Not sure, please correct me if I am wrong.

It sounds specific, but it's actually common and a bit different from what you have above and what I see in Studio. In Studio, it is a long-term view, where often many rows are the same or have slight differences, and those changes may appear in different columns over time.

In VS Code, there is active experimentation, so each row is very likely to contain some changes, often on the same subset of columns. For example:

Screen Shot 2022-07-07 at 1 39 04 PM

In this simplified example, all the blue params columns are the same except for min_split, which is the current parameter of interest (in reality, there are often a handful of columns likely to change each time). There are often way too many columns to fit on the screen so this column may be hidden out of view. Users can drag the relevant columns over, so it might not be critical, but finding them if there are many columns could be annoying.

So I guess it's less about showing, hiding, or highlighting, and more about the column order. For example, maybe it would be useful to have an option to reorder columns to show those where any row has a change first, but maybe you can come up with better ideas to solve the problem.

What is the way to unhide columns now? I can't seem to find it.

At the GUI level is at the sidebar/columns

By the way, I still don't understand how to do this 😅 . I'm sure it's my own mental block, but just a note to consider how easy it is to find this option.

@maxagin
Copy link
Contributor

maxagin commented Jul 7, 2022

Good point, what is "redundant" will change over time since the table is dynamically updated, so it won't make sense to have this option always "on" by default.

You right. By default, we have all (more correct will be to say: we will have nothing at the start). What you proposed, to my mind, does not affect the main flow. It is only another way to simplify the table for comparison.
I can see the following scenario:
run exps (have a few at least) -> toggle --only-changed -> at this point I would mark and label (ad descriptions) to the most interesting -> toggle show all to see the entire flow
Interesting conclusion: I may want to only collapse or completely delete the rows that have not been changed to have a more compact environment in the “toggle --only-changed” step from the above flow.

Updated flow (for v1):
run exps -> toggle --only-changed -> analyze, mark and add descriptions to the most interesting, collapse and delete rows -> toggle show all

!! Another option would be to always highlight differences in the table without any extra UI controls.


So I guess it's less about showing, hiding, or highlighting, and more about the column order.

You have all the freedom to hide columns and also change their position in the table right now. Talking about our example, I would do:
toggle --only-changed (simplify the view, considering the amount of data we have, this can be helpful) -> move the “min_split” column near the other two columns that are already beside the exps column, so all the changes are at the one place close to each other -> finally compare and make some decisions + [analyze, mark and add descriptions to the most interesting, collapse and delete rows] -> mark all as phase [number] -> continue experimenting.

WDYT?

By the way, I still don't understand how to do this 😅 . I'm sure it's my own mental block, but just a note to consider how easy it is to find this option.

We are working on redefining this and I will use your comment as another good argument :) Thank you @dberenbaum !

@mattseddon
Copy link
Member

@dberenbaum

By the way, I still don't understand how to do this 😅 . I'm sure it's my own mental block, but just a note to consider how easy it is to find this option.

Just in case you are still stuck => See the view container in the sidebar:

Screen.Recording.2022-07-13.at.11.53.15.am.mov

@wolmir
Copy link
Contributor

wolmir commented Jul 19, 2022

@dberenbaum @maxagin
Something like this, maybe?

Screen.Recording.2022-07-19.at.15.37.31.mov

@dberenbaum
Copy link
Contributor Author

Looks good @wolmir! After speaking with @maxagin, I'm not sure we even need to actually drop any columns though. At most, we might need a way to bring the changed columns to the left.

@maxagin
Copy link
Contributor

maxagin commented Jul 20, 2022

Great !
I think now we are ready for the UI solution iterations. I will update you when it's ready. Thank you, folks!

@maxagin
Copy link
Contributor

maxagin commented Jul 21, 2022

Hey folks!
I think the below sketch may be a good solution. Let me know how you feel about it. Thank you !

In relation to - Inform the user about hidden (plots, sidebar) or applied actions with table #2075

Concept: We just highlight changes. The user can still see the same table and continue to work with the information.

@dberenbaum especially would like to ask you for your opinion here:) Thanks!

Before

Screen Shot 2022-07-20 at 11 45 00 PM

After

Screen Shot 2022-07-20 at 11 45 09 PM

Same two examples, but in context

Screen Shot 2022-07-20 at 11 46 42 PM

Screen Shot 2022-07-21 at 1 04 32 AM

@dberenbaum
Copy link
Contributor Author

Thanks @maxagin!

What is considered "changed" here?

This seems potentially useful to quickly pick out meaningful values from the table. However, my immediate concern was that those values are often hidden in columns to the right off the screen and potentially spread out, so highlighting won't do much good.

Regarding the problem of the columns being off the screen, if I'm doing hyperparameter tuning, I may be trying a different value every experiment for a few columns and all other columns stay unchanged for every row in the table. I was hoping a solution might allow me in a single step to "snap" or reorder columns and bring them to the left of the screen if any values in that column are unequal (and if more experiments come, I can perform the reordering again based on the updated table values).

Regarding the problem of quickly seeing meaningful values from the table, highlighting seems nice, but it's unclear to me how we identify which values to highlight. It's not always important whether the value has changed from the previous row since often many experiments will be queued and run together and the order won't matter. At my previous company, their internal experiment tracking tool used color gradients to highlight the extreme values in each column (like conditional formatting in a spreadsheet). I know those are noisy and not that clean looking, but something like that can be a helpful visual aid more than a binary choice of whether the value is interesting or not.

@maxagin
Copy link
Contributor

maxagin commented Jul 22, 2022

Hi @dberenbaum ! Please see my response below.

What is considered "changed" here?

High-fidelity UI solution + actions ribbon concept. The logic we discussed is the same. See below for more details.


This seems potentially useful to quickly pick out meaningful values from the table. However, my immediate concern was that those values are often hidden in columns to the right off the screen and potentially spread out, so highlighting won't do much good.

You can hide columns and also change their position in the table already

Change position

Screen.Recording.2022-07-22.at.1.13.12.AM.mov

Hide

Screen.Recording.2022-07-22.at.1.13.51.AM.mov

The Show Only Changed will help to adjust the table as you would like to.
The workflow I can imagine:

a.toggle --only-changed (simplify the view).
b.move and hide columns. Put them near each other beside the exps column, so all the columns with the changes are at the one place close to each other.
c. compare and mark with the stars most interesting, rename and eventually add some descriptions
d. eventually collapse, not interesting rows (with the delete option if the user wants to remove it completely)
e. continue experimenting in the table and comparing Runs in the Plots view


Regarding the problem of the columns being off the screen, if I'm doing hyperparameter tuning, I may be trying a different value every experiment for a few columns and all other columns stay unchanged for every row in the table. I was hoping a solution might allow me in a single step to "snap" or reorder columns and bring them to the left of the screen if any values in that column are unequal

Good. I thought that it may be good if users can see all the information, but have the option to reorder or hide columns manually, but if you think it’s not important we could hide unchanged columns automatically and show them back if the changes happened in the hidden columns. See below:

Before

Screen Shot 2022-07-22 at 1 39 48 AM

After

Screen Shot 2022-07-22 at 1 36 32 AM

(and if more experiments come, I can perform the reordering again based on the updated table values).

This is something that will happen also automatically, based on the above, unless you will toggle the Show Only Changed off. Does it make sense?


Regarding the problem of quickly seeing meaningful values from the table, highlighting seems nice, but it's unclear to me how we identify which values to highlight. It's not always important whether the value has changed from the previous row since often many experiments will be queued and run together and the order won't matter.

Yeah. It is why I have proposed keeping all the values, so if the “system” is wrong, the user still can see all info and make the decision.
However, we are displaying the exps in the order, so my guess is the oldest (cell value) will be highlighted

At my previous company, their internal experiment tracking tool used color gradients to highlight the extreme values in each column (like conditional formatting in a spreadsheet). I know those are noisy and not that clean looking, but something like that can be a helpful visual aid more than a binary choice of whether the value is interesting or not.

This is great, but may be very complex to implement. @mattseddon what do you think about this?

@mattseddon
Copy link
Member

FWIW we have already implemented color highlighting for deps when they are changed with respect to the previous commit. See #2029. This was done as part of #1657.

@mattseddon
Copy link
Member

At my previous company, their internal experiment tracking tool used color gradients to highlight the extreme values in each column (like conditional formatting in a spreadsheet). I know those are noisy and not that clean looking, but something like that can be a helpful visual aid more than a binary choice of whether the value is interesting or not.

This is great, but may be very complex to implement. @mattseddon what do you think about this?

Not impossible but would be painful. We would need a very good reason (or be very brave) to start on this without a lot of data/signal to back it up.

@dberenbaum
Copy link
Contributor Author

The workflow I can imagine:

a.toggle --only-changed (simplify the view). b.move and hide columns. Put them near each other beside the exps column, so all the columns with the changes are at the one place close to each other. c. compare and mark with the stars most interesting, rename and eventually add some descriptions d. eventually collapse, not interesting rows (with the delete option if the user wants to remove it completely) e. continue experimenting in the table and comparing Runs in the Plots view

Sorry, I should have been explicit that I'm aware that I can hide and move columns, but I would like it to be easy and quick to get to the relevant info. Those columns of interest may be way off to the right and spread out from each other. This workflow feels like a lot more work for the user than auto-reordering (which is what I meant by "snapping").

Good. I thought that it may be good if users can see all the information, but have the option to reorder or hide columns manually, but if you think it’s not important we could hide unchanged columns automatically and show them back if the changes happened in the hidden columns.

Yes, this is what I would like to see. I agree that it may be aggressive to hide the columns, so I would prefer to reorder them. No strong opinion on whether we do that automatically or via a toggle.

(and if more experiments come, I can perform the reordering again based on the updated table values).

This is something that will happen also automatically, based on the above, unless you will toggle the Show Only Changed off. Does it make sense?

I thought from the above that "Show Only Changed" highlights changes but doesn't reorder anything?

If we go with the option to reorder columns, then yes, it makes sense.

@maxagin
Copy link
Contributor

maxagin commented Jul 22, 2022

Yes, this is what I would like to see. I agree that it may be aggressive to hide the columns, so I would prefer to reorder them. No strong opinion on whether we do that automatically or via a toggle.

Reorder without user permission would not be good. If we hide unchanged columns with the toggle “--only-changed” this is more correct to my mind, as the user requesting this changes by toggle activation.

I thought from the above that "Show Only Changed" highlights changes but doesn't reorder anything?

Hiding unchanged columns and highlighting changed cell values.

So the mockup below is satisfying our requirements to my mind:

Screen Shot 2022-07-22 at 7 07 31 PM

@maxagin
Copy link
Contributor

maxagin commented Jul 23, 2022

@dberenbaum I have put together a document including four possible options with a detailed analysis of each one. Please review the document and let me know what you think would be the best solution for us to follow.
Have a great weekend!

Figma

@shcheklein in case you have nothing better to do than browsing GH this beautiful Friday evening :) You are most welcome to share your comments on this issue.

@dberenbaum
Copy link
Contributor Author

Hi @maxagin, sounds good, thanks! It looks like I don't have permission to see the figma doc. Can you check?

@dberenbaum
Copy link
Contributor Author

Thanks @maxagin!

Thoughts on option 1

Option 1 does NOT reorder nor hide any columns, right?

If that's true, is a toggle needed? Is it ever helpful to toggle highlighting off?

Option 1 seems like a good start no matter what else we decide to do.

**Option 5 🤣 **

Let me try to better explain what I have in mind, and you can let me know if it makes sense.

The idea is to reorder changed/unchanged columns using something like an action button. This is not a toggle, nor is it automatic. Instead there is some button to "move changed columns to the left." It reorders the columns and then returns control to the user and does not "stay on" like a toggle.

The workflow would look like:

  1. Click the "move changed columns" button to create a useful default view.
  2. Manually move and hide columns to further tweak the view.
  3. Compare rows and star, label, hide, etc.
  4. Continue experimenting.
  5. Click the "move changed columns" button again. If there are newly changed columns, they will be moved to the left of any unchanged columns.
  6. Continue comparing.

Advantages I see to this approach:

  1. It allows users to get to a reasonable view quickly.
  2. It doesn't interfere with users' choices of columns to hide.
  3. Since it's not a toggle, users can manually reorder columns after without confusion.

Final thoughts

Without any reordering, I don't think we address the original request. The step to "manually move and hide columns" to get to a reasonable view still seems painful. It doesn't need to be top priority, but I would like to at least keep the issue open until we have some way to avoid that step.

@shcheklein shcheklein removed the 🎨 design Needs design input or is being actively worked on label Nov 29, 2022
@dberenbaum
Copy link
Contributor Author

A customer complained that they don't use the extension much because it's hard for them to keep the table looking clean as their project grows and metrics and their names change over time (and between different branches). Even though they can hide columns, they find it hard to maintain the right columns as they work on the project.

@shcheklein
Copy link
Member

@dberenbaum what tools do they use instead now and how?

@dberenbaum
Copy link
Contributor Author

Not sure if they use something else or just don't use it as much as they would otherwise. We will meet again next week, so I'll make a note to follow up.

@PythonFZ
Copy link

I was going through the issues here and was looking if this feature has been discussed already.
As an enduser I just wanted give a short report.

I like the idea of move changed columns for some customized view on the experiments.
But I'm also using DVC in such a way, that I'm trying to log every possible parameter. (see ZnTrack for more information)
Therefore, I often have a lot of parameters that aren't changed at all. This could be a few hundred. Selecting them can be a tedious task so I would be very much in favour of having a Show only changed toggle just like dvc exp show --only-changed and discussed by maxagin

@mattseddon
Copy link
Member

@PythonFZ ICYMI this feature was (finally) implemented in #4402 (see PR for a demo on how it works), please LMK if you have any feedback 🙏🏻.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A: experiments Area: experiments table webview and everything related priority-p2 Future feature, less priority for now
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants